調べてみましたが、単一のフォームを使用してアコーディオンを送信する方法に関する明確な例は見つかりませんでした。私が見つけた問題は、開いたタブのフィールドのみを処理 (検証) したい場合です。
私のページの構造は次のとおりです。
<h:form>
<p:accordionPanel activeIndex="#{bean.selectedTab}">
<p:ajax event="tabChange" listener="#{bean.tabChangeListener}"/>
<p:tab title="Tab1" id="t1">
<p:inputText id="reqField1" required="true"/>
</p:tab>
<p:tab title="Tab2" id="t2">
<p:inputText id="reqField2" required="true"/>
</p:tab>
</p:accordionPanel>
<p:commandButton update="list" immediate="true" actionListener="#{bean.addRecord}"/>
</h:form>
方法:
@SessionScoped
public class Bean{
public void tabChangeListener(AjaxBehaviorEvent evt){
AccordionPanel panel = (AccordionPanel) evt.getComponent();
// getLoadedTabs() returns an empty list
String currentlyLoadedTabId = panel.getLoadedTabs().get(this.selectedTab).getClientId();
}
}
p:commandButton タグのプロセス属性の一部として、現在開いているタブの ID を指定する方法はありますか?
UPDATE Tab1が開いている場合、送信時に、reqField2ではなくreqField1のみを検証したいと考えています。逆に、Tab2 が開いているときは、reqField1 ではなく reqField2 のみを検証したいと考えています。