Apache Trinidad tr:panelTabbed コンポーネントに問題があります。このコンポーネントのタブ (tr:showDetailItem) にさまざまなフォームを配置しようとしています。これは、最初の試行ではまったく機能しません (NullPointerException、org.apache.myfaces.trinidadinternal.ui.laf.base.xhtml.FormValueRenderer.addNeededValue(FormValueRenderer.java:126) で取得します:
<tr:panelTabbed>
<tr:showDetailItem text="First tab">
<tr:form>
<tr:inputText label="Value 1" value="#{myBean.someValue1}" required="true" />
<tr:commandButton text="Save Value 1" actionListener="#{myBean.saveValue1}" />
</tr:form>
</tr:showDetailItem>
<tr:showDetailItem text="Second tab">
<tr:form>
<tr:inputText label="Value 2" value="#{myBean.someValue2}" required="true" />
<tr:commandButton text="Save Value 2" actionListener="#{myBean.saveValue2}" />
</tr:form>
</tr:showDetailItem>
</tr:panelTabbed>
このエラーは、tr:form タグ内にコンテンツがない場合にも発生するため、独自の Java Bean とは関係ありません。
tr:panelTabbed は tr:form タグ内に配置する必要があることがわかりました。別のフォーム タグ内の 1 つのフォーム タグは許可されていないため (上記の例外に再びつながります)、コードを次のように変更しました。
<tr:form>
<tr:panelTabbed>
<tr:showDetailItem text="First tab">
<tr:inputText label="Value 1" value="#{myBean.someValue1}" required="true" />
<tr:commandButton text="Save Value 1" actionListener="#{myBean.saveValue1}" />
</tr:showDetailItem>
<tr:showDetailItem text="Second tab">
<tr:inputText label="Value 2" value="#{myBean.someValue2}" required="true" />
<tr:commandButton text="Save Value 2" actionListener="#{myBean.saveValue2}" />
</tr:showDetailItem>
</tr:panelTabbed>
</tr:form>
それはそもそもうまくいきますが、私の最終的な問題につながります:
各フォームにいくつかの検証があります。最初のタブに検証エラーが含まれているときにユーザーが 2 番目のタブに切り替えようとすると、その操作は許可されません。この動作を回避したいのですが、ユーザーが保存ボタンをクリックしたときに現在のタブの内容も検証したいと考えています。
これを解決する方法はありますか?
前もって感謝します