如何跳过隐藏组件的验证?

时间:2012-06-25 13:34:28

标签: jsf-2

我有一个类似下面的场景..

<h:selectOneRadio id="someId" value="#{myBean.type}" required="true">                               
    <f:ajax  event="valueChange"  execute="@form" render="myPanel">
    <f:selectItem itemLabel="Existing Type" itemValue="Existing Type" />
    <f:selectItem itemLabel="New Type" itemValue="New Type" />
<h:selectOneRadio>

<h:panelGroup id="myPanel" rendered="#{myBean.checkforNewType()}">
    <h:inputText id="txtval" value="#{mybean.val}" required = "true" requiredMessage="Some message">
    <h:message for="txtval" styleClass="error"/>
<h:panelGroup>

基本上,如果属性类型的值为“Existing Type”,则应隐藏包含文本框的面板。 但我面临的问题是,如果用户将框保留为空白,则面板未被隐藏,因为它未通过验证。

当包含文本框的面板被隐藏时,是否有避免验证?

1 个答案:

答案 0 :(得分:1)

更好地检查请求参数值。一般验证失败时,模型值不会更新,因此当绑定到请求范围的bean时,rendered条件将失败。

<h:selectOneRadio id="someId" value="#{myBean.type}" required="true">                               
    <f:ajax event="valueChange" execute="@form" render="myPanel">
    <f:selectItem itemLabel="Existing Type" itemValue="Existing Type" />
    <f:selectItem itemLabel="New Type" itemValue="New Type" />
<h:selectOneRadio>

<h:panelGroup id="myPanel" rendered="#{param['formId:someId'] == 'New Type'}">
    <h:inputText id="txtval" value="#{mybean.val}" required="true" requiredMessage="Some message">
    <h:message for="txtval" styleClass="error"/>
<h:panelGroup>

在此,我假设父<h:form>有一个id="formId"