我有一个禁用某种表单的复选框。
<h:selectBooleanCheckbox id="ldapAuthEnabled" value="#{enabled}" label="check it">
当我检查它时,它会导致禁用我表单中的所有字段,以便:
<h:inputText mandatory="true" value="#{someVar}"
disabled="#{!enabled}" required="#{enabled}" />
时会出现问题
问题是:如何使其按预期工作? - 禁用字段时,无需保留验证消息并认为该表单无效。
- 编辑:
正如答案(来自BalusC)中所建议的,我将“值”更改为“绑定”,所以现在我有这样的代码:
<h:panelGroup id="my-panel">
<h:selectBooleanCheckbox id="myEdit" binding="#{checkbox}" label="enable it!">
<f:ajax event="click" render="my-panel"/>
</h:selectBooleanCheckbox>
<h:inputText id="name" value="#{bean.name}" disabled="#{not checkbox.value}" required="true" />
<h:outputText value="sometext"/>
</h:panelGroup>
"<h:panelGroup id="my-panel">"
是“表单”的一部分。
但是有相同的结果 - 验证错误阻止我做save()。
我现在为我的bean使用“SessionScope”。
答案 0 :(得分:2)
具体的功能要求是合理的,但到目前为止发布的代码是如此奇怪和不完整,以至于难以解释它的具体问题。到目前为止,您在理论上不起作用,因为模型值仅在更新模型值阶段更新,而禁用/必需属性在应用请求值和验证阶段之前很久就会被检查。
基本上,您应该将checkbox值绑定到位于视图范围内的模型中的布尔属性,如下所示:
<h:selectBooleanCheckbox value="#{bean.enabled}" />
<h:inputText required="true" disabled="#{not bean.enabled}" />
或至少将物理复选框组件本身检查到视图中,如下所示:
<h:selectBooleanCheckbox binding="#{checkbox}" />
<h:inputText required="true" disabled="#{not checkbox.value}" />
当选中(取消)复选框时,不要忘记提交值和ajax-update表单。我也没有在你的任何地方看到这一点。总而言之,这个完整的copy'n'paste'n'runnable启动示例应该让你开始:
<h:form>
<h:selectBooleanCheckbox binding="#{checkbox}">
<f:ajax render="@form" />
</h:selectBooleanCheckbox>
<h:inputText required="true" disabled="#{not checkbox.value}" />
<h:inputText required="true" disabled="#{not checkbox.value}" />
<h:inputText required="true" disabled="#{not checkbox.value}" />
<h:commandButton value="submit" />
<h:messages />
</h:form>