【问题标题】:Seam validation question - check for at least one field filled接缝验证问题 - 检查是否填写了至少一个字段
【发布时间】:2010-12-10 11:49:28
【问题描述】:

我的表单中存在用户必须填写至少一个字段的情况。使用“必需”命令,我不能这样做。在 seam 中验证这一点的最佳方法是什么?我不想使用 javascript。

谢谢!

【问题讨论】:

    标签: jsf seam validation


    【解决方案1】:

    JSF2 将允许您进行表单级别的验证。现在,您将不得不使用以下任一方法:

    • 在表单后的 Bean 中验证 提交并填充 如果失败,则向用户发送 FacesMessage。
    • 将验证器添加到一个字段并在 该验证器加载到另一个 字段并检查它们的值。

    【讨论】:

      【解决方案2】:

      required 属性的结果取决于请求参数映射中其他输入字段的存在。

      <h:form id="form">
          <h:inputText id="input1" value="#{bean.input1}" required="#{empty param['form:input2'] and empty param['form:input3']}" />
          <h:inputText id="input2" value="#{bean.input2}" required="#{empty param['form:input1'] and empty param['form:input3']}" />
          <h:inputText id="input3" value="#{bean.input3}" required="#{empty param['form:input1'] and empty param['form:input2']}" />
      </h:form>
      

      或者,您也可以使用组件绑定并使用UIInput#getValue() 来检查先前组件的值,并使用UIInput#getSubmittedValue() 来检查它们是否有待验证的组件(组件按顺序处理为它们出现在组件树中)。这样您就不需要硬编码客户端 ID。您只需要确保绑定名称不会与现有托管 bean 名称冲突。

      <h:form>
          <h:inputText binding="#{input1}" required="#{empty input2.submittedValue and empty input3.submittedValue}" />
          <h:inputText binding="#{input2}" required="#{empty input1.value and empty input3.submittedValue}" />
          <h:inputText binding="#{input3}" required="#{empty input1.value and empty input2.value}" />
      </h:form>
      

      【讨论】:

        【解决方案3】:

        如果你不想使用 required 属性或 javascript,那么有两种方法。

        其中一个是创建验证器,但在我看来这太过分了。

        我只会检查您的 bean 中的输入是否为空或为空。

        if ("".equals(theFieldYouWantToCheck) || theFieldYouWantToCheck == null) {
         //Either throw exception or return "false" so that you can handle it
        }
        

        【讨论】:

          【解决方案4】:

          如果您使用的是 RichFaces,那么您可以执行如下验证(请参阅 http://mkblog.exadel.com/ria/richfaces-ria/richfaces-built-in-client-functions/):

          <h:form id="form">
              <h:inputText id="input1" value="#{bean.input1}" />
              <h:inputText id="input2" value="#{bean.input2}" 
                  required="#{empty rich:findComponent('input1').submittedValue}"  
                  requiredMessage="At least one of the fields input1 and input2 must be filled."/>
          </h:form>
          

          注意表达式rich:findComponent('input1') 等价于uiComponent['input1']。原因是Seam提供了动态映射uiComponent来查找UI组件。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-08-18
            • 1970-01-01
            • 1970-01-01
            • 2014-06-08
            • 2017-05-02
            • 1970-01-01
            • 1970-01-01
            • 2018-09-16
            相关资源
            最近更新 更多