我的表单中有一种情况是用户必须填写至少一个字段。使用“必需”命令,我不能这样做。在煤层中验证这个的最佳方法是什么?我不想使用javascript。
谢谢!
答案 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将允许您进行表单级验证。现在,您必须使用以下两种方法:
答案 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组件。