【问题标题】:Backing Bean not getting values sent by javascript支持 Bean 未获取 javascript 发送的值
【发布时间】: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 流量。
  • 确保您的&lt;h:inputHidden&gt;s 在您的&lt;h:form&gt; 中并且您的getBirthDate 方法有效,您可以在Firefox(使用firebug)或Chrome(使用Chrome 控制台按 Ctrl + Shift + J)。
  • 关于ID,JSF将通过:的形式改变组件的ID,例如在&lt;h:form id="myForm"&gt; &lt;h:inputText id="myInputText" /&gt; &lt;/h:form&gt;中,“myInputText”的ID将是“myForm:myInputText” ,如果您的 JSF 组件在 &lt;h:inputText id="myInputText" /&gt; &lt;h:form id="myForm"&gt; &lt;!-- some content here... --&gt; &lt;/h:form&gt; 这样的表单之外,则“myInputText” id 将是“myInputText”,因为它不在容器内。
  • 感谢 luiggi 的回答,但我当然知道这就是为什么在 tha javascript 中使用这种 id。

标签: java javascript jsf facelets managed-bean


【解决方案1】:

您能否检查您的 bean 的范围以及它是否在您提交期间重新初始化。在这种情况下,无论值是否从客户端发送,隐藏字段都会获取其初始值。

【讨论】:

    【解决方案2】:

    您可以使用 alert 语句检查对象是否存在。示例

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

    如果 Object 值为 null,则您为获取元素而提供的 Id 不正确..还要检查您从对象中获得的值..我认为这可能会有所帮助

    【讨论】:

      猜你喜欢
      • 2013-02-04
      • 2011-04-11
      • 1970-01-01
      • 2014-02-19
      • 1970-01-01
      • 2017-01-18
      • 1970-01-01
      • 2012-07-05
      • 1970-01-01
      相关资源
      最近更新 更多