私はJSFを初めて使用し、奇妙な問題に遭遇しました。解決方法がわかりません。
画面に複数のタブがあり、そのうちの 1 つにテキスト フィールド、ドロップダウンなどがあります。すべてのテキスト フィールドとドロップダウンには、required="true"が設定されています。
この検証のため、値を入力または選択せずに別のタブに移動しようとすると、移動できず、検証メッセージ ( value is required ) が表示されます。
しかし、タブに保存ボタンがあります。タブの切り替え/ナビゲーション中ではなく、保存ボタンをクリックしたときにのみ検証がトリガーされます。保存ボタンをクリックすると検証が機能する間、別のタブに切り替えたときに検証がトリガーされないようにするだけです。
この検証では、別のタブに切り替えることができず、タブを切り替えたときにこの検証がトリガーされる理由がわかりません。
誰でも私の問題の解決策を提案してください。
更新: CycDemo の回答に基づいて行った変更は次のとおりです。
<h:tab name="First Tab" accessKey="s">
<h:panelGroup >
<h:dataTable id="firstTable" styleClass="dataTableEx" headerClass="headerClass"
footerClass="footerClass" rowClasses="rowClass1,rowClass2"
columnClasses="columnClass1" value="#{clientProductCRUDBean.model}"
var="item" border="1" cellpadding="2" cellspacing="0" >
<!-- this for the incoming originator type dropdown field -->
<h:column>
<f:facet name="header">
<h:outputText value="firstDropDown" />
</f:facet>
<h:selectOneMenu id="firstDropDown"
required="true" requiredMessage="required field" immediate="true" >
<f:selectItem itemLabel="--Select--" itemValue="#{null}" />
<h:message for="firstDropDown" errorClass="generalErrorText"/>
</h:selectOneMenu>
</h:column>
<!-- this for the outgoing originator text field -->
<h:column >
<f:facet name="header">
<h:outputText value="firstTextField"/>
</f:facet>
<h:inputText id="firstTextField"
required="true" validatorMessage="Max Length 20" requiredMessage="required field" immediate="true" >
<f:validateLength maximum="20"/>
<h:message for="firstTextField" errorClass="generalErrorText"/>
</h:inputText>
</h:column>
<!-- this for the replace or randomise radio buttons text field -->
<!-- this for the operators selection drop down-->
</h:dataTable>
</h:panelGroup>
<h:panelGroup style="padding: 1px; margin-top: 5px;" >
<h:commandButton id="firstSaveButton" styleClass="commandButton" value="Save" />
<h:commandButton id="firstSaveCancel" styleClass="commandButton" value="Cancel" immediate="true"/>
</h:panelGroup>
<br />
</h:tab>
それでも検証が呼び出されます。