我已经检查过了,但没有找到关于如何使用单个表单提交手风琴的明确示例。我发现的问题是当我只想处理(验证)已打开选项卡的字段时。
我的页面结构如下:
<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 指定为 process 属性的一部分?
更新 当 Tab1 打开时,在提交时,我只想验证 reqField1 而不是 reqField2。反之亦然,当 Tab2 打开时,我只想验证 reqField2 而不是 reqField1。