我在使用JSF2在Richfaces 4中创建一个工作tabPanel时遇到了麻烦。
每次我选择一个标签时我都可以看到ajax请求已被发送,但它没有在我的支持bean中调用actionListener方法(我知道这是在调试模式下运行)。
当我再次选择选项卡时,它将起作用(我再次处于调试模式,可以看到它进入 myBean.activateTab 方法)。
TabPanelTest.xhtml
<h:form id="myFormTest">
<rich:tabPanel id="myTabPanel" value="Tab1" activeItem="#{myBean.tabState.selectedTab}"
switchType="ajax">
<rich:tab id="Tab1" label="Tab 1" actionListener="#{myBean.activateTab}">
<ui:include src="myTab.xhtml">
<ui:param name="filterText" value="Tab 1" />
</ui:include>
</rich:tab>
<rich:tab id="Tab2" label="Tab 2" actionListener="#{myBean.activateTab}">
<ui:include src="myTab.xhtml">
<ui:param name="filterText" value="Tab 2" />
</ui:include>
</rich:tab>
</rich:tabPanel>
</h:form>
myBean.java
public void activateTab(ActionEvent ae)
{
String componentId = ae.getComponent().getId();
}
任何帮助非常感谢。
答案 0 :(得分:1)
好的....我最终自己找到了解决方案!
我从每个rich:tab中删除了actionListener,而是使用a4j:ajax来监听itemChanges
<h:form id="myFormTest">
<rich:tabPanel id="myTabPanel" value="Tab1" activeItem="#{myBean.tabState.selectedTab}"
switchType="ajax">
<a4j:ajax event="itemchange" onerror="handleAjaxError" listener="#{myRequestsBean.activateTab}" render="myTabPanel" />
<rich:tab id="All" header="#{messages['test.allTab']}" name="#{messages['test.allTab']}">
<ui:include src="myTab.xhtml">
<ui:param name="filterText" value="{messages['MyRequests.allFilter']}" />
</ui:include>
</rich:tab>
<rich:tab id="Pending" header="#{messages['MyRequests.pendingTab']}" name="#{messages['MyRequests.pendingTab']}">
<ui:include src="myTab.xhtml">
<ui:param name="filterText" value="#{messages['MyRequests.pendingFilter']}" />
</ui:include>
</rich:tab>
</rich:tabPanel>
</h:form>