Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Validation 如果字段被禁用,则防止出现验证消息_Validation_Jsf - Fatal编程技术网

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}" />

问题是什么时候出现的

  • 当字段未被禁用时,我会尝试保护表单-它会显示验证消息
  • 然后我点击复选框,它使所有字段都被禁用,但是-它仍然显示验证消息!因此,它甚至不能转到我的controller.safe()方法,因为这一点
  • 问题是:如何让它按预期工作当字段被禁用时,不需要保留验证消息并认为表单无效

    --编辑:

    正如答案(来自BalusC)中所建议的,我将“value”更改为“binding”,因此现在我有如下代码:

    <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吗。。。??您如何能够正确地向其他人演示该问题,而不能仅用技术术语理解和解释该问题?问题更多的是为什么在禁用表单时显示验证消息,而不是如何将复选框与模型绑定。因为在应用请求值阶段未禁用该复选框。你读过并理解了答案吗?您是否尝试过给定的启动示例?那么代码中有更多的内容导致了这种情况,这在目前提供的信息中是不可见的。信息技术