【发布时间】:2012-06-25 02:33:56
【问题描述】:
我有三个下拉列表,它们的值通过以下 JavaScript 函数复制到 <h:inputHidden> 组件:
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()" />
但它们以null 的形式出现在支持bean 中。这是如何引起的,我该如何解决?
编辑:当我尝试从 JSF 组件中选择元素时,jQuery 冻结。元素的ID有问题吗?
编辑:下面是随 HTTP 请求一起发送的变量的屏幕截图,证明这些值已正确发送。豆子会有什么问题?
【问题讨论】:
-
您确定正确的更改值已发送到服务器吗?在您的网络浏览器的开发者工具集中检查 HTTP 流量。
-
确保您的
<h:inputHidden>s 在您的<h:form>中并且您的getBirthDate方法有效,您可以在Firefox(使用firebug)或Chrome(使用Chrome 控制台按 Ctrl + Shift + J)。 -
关于ID,JSF将通过
: 的形式改变组件的ID,例如在 <h:form id="myForm"> <h:inputText id="myInputText" /> </h:form>中,“myInputText”的ID将是“myForm:myInputText” ,如果您的 JSF 组件在<h:inputText id="myInputText" /> <h:form id="myForm"> <!-- some content here... --> </h:form>这样的表单之外,则“myInputText” id 将是“myInputText”,因为它不在容器内。 -
感谢 luiggi 的回答,但我当然知道这就是为什么在 tha javascript 中使用这种 id。
标签: java javascript jsf facelets managed-bean