Richfaces 4 tabPanel actionListener 在第一次调用时不起作用

发布于 2024-12-11 17:34:43 字数 1194 浏览 0 评论 0原文

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



非常感谢任何帮助。

I'm having trouble creating a working tabPanel in Richfaces 4 with JSF2.

Every time I select a Tab I can see the ajax request been sent, but it is NOT calling the actionListener method in my backing bean (I know this from running in Debug mode).

When I select the tab again, it will work (Again I am in debug mode and can see it going into the myBean.activateTab method).

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();
}

Any help greatly appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

盗琴音 2024-12-18 17:34:43

好吧......我最终自己找到了解决方案!

我从每个 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>

Ok....I eventually found the solution myself!

I removed the actionListener from each rich:tab and instead used a a4j:ajax to listen for 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>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文