2012-06-25 44 views
1

发送的值,我有三个下拉列表其值由下面的JavaScript函数都被复制到<h:inputHidden>组件:辅助Bean没有得到由JavaScript

function getBirthDate() { 
    var months = document.getElementById("months") 
    var hidden1 = document.getElementById("formsignup:monthField"); 
    hidden1.value = months.options[months.selectedIndex].text; 
    var days = document.getElementById("days"); 
    var hidden2 = document.getElementById("formsignup:dayField"); 
    hidden2.value = days.options[days.selectedIndex].value; 
    var years = document.getElementById("years"); 
    var hidden3 = document.getElementById("formsignup:yearField"); 
    hidden3.value = years.options[years.selectedIndex].value; 
} 

这里有三个<h:inputHidden>组件:

<h:inputHidden value="#{signupBean.month}" id="monthField"/> 
<h:inputHidden value="#{signupBean.day}" id="dayField"/> 
<h:inputHidden value="#{signupBean.year}" id="yearField"/> 

这是应该调用函数的命令按钮,该函数将值复制到输入,然后将它们提交给后备bean。

<h:commandButton image="images/images/signup1.png" 
    styleClass="joinnow" 
    id="joinus" action="#{signupBean.save}" 
    onclick="getBirthDate()" /> 

但是,他们在抵达后台bean。这是如何造成的,我该如何解决这个问题?

编辑:当我尝试从JSF组件中选择元素时,jQuery冻结。元素的ID有问题吗?

编辑:下面是与HTTP请求一起发送的变量屏幕截图,证明值已正确发送。这个bean有什么问题?

enter image description here

+0

你确定正确的更改值已发送到服务器?检查浏览器的开发人员工具集中的HTTP流量。 – BalusC

+0

确保你的'在你的''内,并且你的'getBirthDate'方法可以工作,你可以在Firefox中使用console.log()'测试每个pass(使用firebug)或Chrome(使用Chrome控制台按Ctrl + Shift + J)。 –

+0

关于ID,JSF将通过以下格式更改组件的ID:,例如在'如果你的JSF组件不在像<! - 这里有一些内容的形式之外,那么“myInputText”将是“myForm:myInputText” .. - >'myInputText“id将是”myInputText“,因为它不在容器内。 –

回答

0

你可以检查你的bean的范围,如果在得到reintialized您提交..在这种情况下,如果值正在从客户端发送来的隐藏字段获取其初始值不管。

0

您可以使用提醒声明来检查对象是否存在。例如

function getBirthDate() { 
var months = document.getElementById("months") 
var hidden1 = document.getElementById("formsignup:monthField"); 
alert(months);alert(months.value); 
alert(hidden1);alert(hidden1.value); 

如果对象值为null ID是你给获得元素是不恰当..还要检查你是从对象所获得的价值。我认为它可以帮助