Richfaces 4 tabPanel actionListener无法在第一次调用时工作

时间:2011-10-24 12:15:42

标签: jsf richfaces

我在使用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();
}



任何帮助非常感谢。

1 个答案:

答案 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>