Validation 如果字段被禁用,则防止出现验证消息
我有一个复选框,可以禁用某些表单Validation 如果字段被禁用,则防止出现验证消息,validation,jsf,Validation,Jsf,我有一个复选框,可以禁用某些表单 <h:selectBooleanCheckbox id="ldapAuthEnabled" value="#{enabled}" label="check it"> 当我检查它时,它会导致禁用表单中的所有字段,以便: <h:inputText mandatory="true" value="#{someVar}" disabled="#{!enabled}" required="#{enabled}" /> 问题是什么时候出
<h:selectBooleanCheckbox id="ldapAuthEnabled" value="#{enabled}" label="check it">
当我检查它时,它会导致禁用表单中的所有字段,以便:
<h:inputText mandatory="true" value="#{someVar}"
disabled="#{!enabled}" required="#{enabled}" />
问题是什么时候出现的
<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>
其中,“
是“表单”的一部分
但是有相同的结果验证错误,阻止我执行save()
我现在用“SessionScope”来表示我的bean。具体的功能需求是合理的,但是到目前为止发布的代码是如此奇怪和不完整,以至于很难解释它的具体问题。到目前为止,您所做的理论上是行不通的,因为模型值仅在更新模型值阶段更新,而禁用/必需的属性在应用请求值和验证阶段之前很久就会被检查 本质上,您应该将复选框值绑定到位于视图范围内的模型中的布尔属性,如下所示:
<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}" />
不要忘记在复选框(取消)选中时提交值并更新表单。在你的尝试中我也看不到这一点。总而言之,这个完整的复制粘贴可运行启动示例应该让您开始:
<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>
另见:
<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}" />
不要忘记在复选框(取消)选中时提交值并更新表单。在你的尝试中我也看不到这一点。总而言之,这个完整的复制粘贴可运行启动示例应该让您开始:
<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>
另见:
{bean.enabled}
。请在SSCCE中发布代码。到目前为止,症状表明条件存储在请求范围而不是视图范围中,并且/或者没有使用JSF ajax来更新表单。但在大多数情况下,将表单值保留在会话范围内是非常有用的,这样在用户刷新页面时会更加安全。。(关于一个代码:我只是把它简化了一点,放在这里。但它是真实的)好的,但在将来,请学习如何创建SSCCE。当复制粘贴到一个完全空白的非模板页面的
中时,代码必须是“复制”“粘贴”“运行”的(由您自己!!),无需修改,以便重现/演示所需的问题。看看这是真的代码吗?我没有看到任何模型的值绑定。例如,{bean.enabled}
。请在SSCCE中发布代码。到目前为止,症状表明条件存储在请求范围而不是视图范围中,并且/或者没有使用JSF ajax来更新表单。但在大多数情况下,将表单值保留在会话范围内是非常有用的,这样在用户刷新页面时会更加安全。。(关于一个代码:我只是把它简化了一点,放在这里。但它是真实的)好的,但在将来,请学习如何创建SSCCE。当复制粘贴到一个完全空白的非模板页面的
中时,代码必须是“复制”“粘贴”“运行”的(由您自己!!),无需修改,以便重现/演示所需的问题。另请参阅,问题更多地是关于为什么在禁用表单时显示验证消息,而不是关于如何将复选框与模型绑定。因为它在应用请求值阶段未被禁用。你读过并理解了答案吗?您是否尝试过给定的启动示例?那么代码中有更多的内容导致了这种情况,这在目前提供的信息中是不可见的。它至少在Mojarra 2.1.25的一个完全空白的游乐场项目中对我有效,并且在按钮中使用action=“#{bean.save}”
完全符合上述代码。也许我应该在面板上进行渲染时包括“”以进行更新?因为我的“消息”不在面板中。这不可能阻止调用action方法。您真的没有代表您创建SSCCE吗。。。??您如何能够正确地向其他人演示该问题,而不能仅用技术术语理解和解释该问题?问题更多的是为什么在禁用表单时显示验证消息,而不是如何将复选框与模型绑定。因为在应用请求值阶段未禁用该复选框。你读过并理解了答案吗?您是否尝试过给定的启动示例?那么代码中有更多的内容导致了这种情况,这在目前提供的信息中是不可见的。信息技术