JSF2.0とリッチフェイス4.2.3を使用してWebアプリを開発しています。以下のようにタブ付きパネルが互いに入れ子になっているページがあります(コードは最後にあります)。
私は次の問題に直面しています:
タブがクリックされると、検証が実行され、2番目のタブは表示されません(テキストフィールドには値が設定されていないため、検証は失敗します)。これは、タブがクリックされると、POSTリクエストが発生し、検証が呼び出されるためです。どうすればこれを回避できますか?
オプションの1つは、switchTypeを「client」に変更することです。ただし、タブをクリックしても更新されたデータは表示されません。
<h:form>
<rich:tabPanel switchType="client">
<rich:tab header="UserManagement">
<rich:tabPanel switchType="client">
<rich:tab header="AddUser">
<h:form>
<h:panelGrid id="addUserForm" columns="3">
Enter Name :
<h:inputText id="name" value="#{userBean.name}"
required="true" requiredMessage="User Id Required.">
</h:inputText>
<h:message for="name"></h:message>
Enter passWord :
<h:inputText id="passWord" value="#{userBean.passWord}" required="true" requiredMessage="PassWord Required.">
</h:inputText>
<h:message for="passWord"></h:message>
Roles :
<h:selectOneMenu id="roles" value="#{userBean.roleId}">
<f:selectItems value="#{userBean.roles}"/>
</h:selectOneMenu>
<h:message for="roles"></h:message>
<h:commandButton action="#{userBean.addUser}"
value="Add User">
<f:ajax render="addUserForm" execute="@form"></f:ajax>
</h:commandButton>
</h:panelGrid>
</h:form>
</rich:tab>
<rich:tab header="EditUser">
<h:form>
<h:panelGrid id="editUserForm" columns="3">
Enter passWord :
<h:inputText id="passWord" value="#{userBean.passWord}" required="true" requiredMessage="PassWord Required.">
</h:inputText>
<h:message for="passWord"></h:message>
Roles :
<h:selectOneMenu id="roles" value="#{userBean.roleId}">
<f:selectItems value="#{userBean.roles}"/>
</h:selectOneMenu>
<h:message for="roles"></h:message>
<h:commandButton action="#{userBean.editUser}"
value="Edit User">
<f:ajax render="editUserForm" execute="@form"></f:ajax>
</h:commandButton>
</h:panelGrid>
</h:form>
</rich:tab>
</rich:tabPanel>
</rich:tab>
<rich:tab header="DeviceManagement">
</rich:tab>
</rich:tabPanel>
</h:form>