2009-10-27 101 views

回答

0

JSF2会让你做一个表单级的验证。现在,你将不得不凑合着用两种:形式 提交后

  • 验证在一个Bean和填充 的FacesMessage给用户,如果它失败。
  • 将验证程序添加到一个字段,并在 验证程序加载其他 字段并检查其值。
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> 
0

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

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

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

if ("".equals(theFieldYouWantToCheck) || theFieldYouWantToCheck == null) { 
//Either throw exception or return "false" so that you can handle it 
} 
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> 

注意,表达丰富:findComponent( '输入1')等同为UIComponent [”输入1' ]。原因是Seam提供了动态映射uiComponent来查找UI组件。

相关问题