Jsf Richfaces 4选项卡面板actionListener在第一次调用时不工作

Jsf Richfaces 4选项卡面板actionListener在第一次调用时不工作,jsf,richfaces,Jsf,Richfaces,我在使用JSF2在Richfaces 4中创建工作选项卡面板时遇到问题。 每次我选择一个选项卡时,我都可以看到ajax请求已发送,但它没有在我的支持bean中调用actionListener方法(我在调试模式下运行时知道这一点)。 当我再次选择该选项卡时,它将工作(我再次处于调试模式,可以看到它进入myBean.activateTab方法) TabPanelTest.xhtml <h:form id="myFormTest"> <rich:tabPanel id="m

我在使用JSF2在Richfaces 4中创建工作选项卡面板时遇到问题。

每次我选择一个选项卡时,我都可以看到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>


非常感谢您的帮助。


好吧……我最终自己找到了解决办法

我从每个rich:tab中删除了actionListener,而是使用a4j:ajax来侦听条目更改

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

您是否尝试过为tabPanel使用itemChangeListener属性。这似乎是处理这件事的预期方式,尽管我从来没能让它表现出来。
<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>