Seam验证问题 - 检查至少一个填写的字段

时间:2009-10-27 13:38:51

标签: jsf seam validation

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

谢谢!

4 个答案:

答案 0 :(得分:1)

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>

答案 1 :(得分:0)

JSF2将允许您进行表单级验证。现在,您必须使用以下两种方法:

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

答案 2 :(得分:0)

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

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

我只会检查bean中的输入是空还是空。

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

答案 3 :(得分:0)

如果您使用的是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组件。