【问题标题】:h:selectBooleanCheckbox not getting set with correct valueh:selectBooleanCheckbox 没有设置正确的值
【发布时间】:2014-06-16 18:20:36
【问题描述】:

版本:

Aapche MyFaces 2.1.14 RichFaces 4.3.5

问题:

我面临着 JSF2.1 非常奇怪的问题

如最后代码sn-p所示,基于布尔变量#{bean.disabled}.禁用布尔复选框 问题如下:

1)首先#{bean.disabled} 评估为false,因此启用了复选框。 用户点击复选框并提交表单(此处未显示表单)

2)action 方法设置disabled = truerequired= true 并再次呈现相同的页面

3) 在此阶段,UI 已单击并禁用了复选框。在这个阶段,形式是 再次提交,bean.setRequired 方法被调用,setter 值为FALSE,而它应该将其设置为TRUE

4)当我创建 disabled="#{false}" 时,这个问题消失了,bean.setRequired 方法被调用,setter 值为 TRUE

所以问题是为什么在第 3 步中观察到的行为即使 UI 在单击条件下显示复选框(意味着它的值为 TRUE,我还打印了 bean.required 值,仅评估为TRUE

代码:

        <h:panelGroup>

            <h:selectBooleanCheckbox id="invite" disabled="#{bean.disabled}" value="#{bean.required}" />

                <h:outputText value="Do Update"/>
         </h:panelGroup>    

【问题讨论】:

  • c:if 是否与问题相关?
  • @Xtreme Biker :它并没有任何相关性
  • 然后将其从问题中删除。问题应该包含显示问题的最少代码段。
  • backing bean 的作用域是什么?
  • @Xtreme Biker :从问题中删除了不必要的部分

标签: jsf-2 richfaces myfaces


【解决方案1】:

确保绑定到#{bean.disabled} 的后备属性是布尔值,而不是设置值"TRUE""FALSE" 的字符串。

此外,您在步骤 3 中描述的行为是预期的。当复选框被禁用时,提交的值将始终为 false,因为浏览器通常会在表单提交期间忽略禁用的字段。为确保您获得正确的值,请在复选框旁边保留一个隐藏字段,使它们保持同步并使用隐藏字段的值来测试复选框是选中还是未选中。如下所示:

<h:selectBooleanCheckbox id="invite" disabled="#{bean.disabled}" value="#{bean.required}" />
<h:inputHidden id="inviteHidden" value="#{bean.requiredHidden}" />

// While setting values, set values for both fields inside the action method

bean.setRequired(true); // ..or false
bean.setRequiredHidden(true); // ..or false

// And to test whether checkbox is checked, do...
if(bean.isRequiredHidden()) {
   ....
}

与您的问题无关,如果您使用 &lt;c:set/&gt; 进行条件渲染,请考虑改用 &lt;a4j:outputPanel rendered = "#{someCondition}"/&gt; 并在您的表单提交上更新它(如果它是 AJAX 提交。

【讨论】:

  • 非常感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-21
  • 1970-01-01
  • 2016-06-04
  • 2012-12-13
  • 1970-01-01
  • 2013-05-01
  • 1970-01-01
相关资源
最近更新 更多