【问题标题】:Primefaces 4.0 tries to call wrong tabChange event handler (AccordionPanel inside TabView)Primefaces 4.0 尝试调用错误的 tabChange 事件处理程序(TabView 内的 AccordionPanel)
【发布时间】:2014-03-04 11:53:30
【问题描述】:

我有一个显示一些标签的页面。每个选项卡都包含一个手风琴。

从技术上讲,我有一个 p:tabView 组件,其中包含四个 p:tab。我们称他们为p:tabView > p:tab。在每个p:tab 中,我有一个p:accordionPanel。我将这些称为p:accordionPanel > p:tab

我的问题是,当用户打开p:tabView > p:tab 之一,然后打开p:accordionPanel > p:tab 之一,然后点击另一个p:tabView > p:tab,然后我不知道如何关闭(或“折叠” ) 当前打开的p:accordionPanel > p:tab

我尝试使用两个 onChange 事件处理程序解决问题,但遇到了一个我不理解的 methodNotFound 异常。我的 JSF 代码是:

<p:tabView dynamic="true" cache="false">
    <p:ajax event="tabChange" listener="#{controller.onTabViewTabChange}" update="@this" />
    <p:tab title="tab 1">
        <p:accordionPanel id="accordionPanelForTab1" dynamic="true" activeIndex="-"
                 value="#{controller.viewBeans}"
                 var="viewBean">
            <p:ajax event="tabChange" listener="#{controller.onAccordionPanelTabChange}" update="@this" />
            <p:tab title="#{viewBean.name}">
                <h:outputText value="#{viewBean.name}" />
            </p:tab>
        </p:accordionPanel>
    </p:tab>
    <p:tab title="tab 2">
        <p:accordionPanel id="accordionPanelForTab2" dynamic="true" activeIndex="-"
                 value="#{controller.viewBeans}"
                 var="viewBean">
            ...
        </p:accordionPanel>
    </p:tab>
    ...
</p:tabView>

在我的控制器中,我有以下事件处理程序:

public void onAccordionPanelTabChange(TabChangeEvent event) {
    logger.info("onAccordionPanelTabChange, tab={}", event.getTab());
}

public void onTabViewTabChange(TabChangeEvent event) {
    logger.info("onTabViewTabChange, tab={}", event.getTab());
}

当我点击p:accordionPanel &gt; p:tab 时,我在控制台中看到预期的调试消息(“onAccordionPanelTabChange, tab=....”)。

但是当我点击p:tabView &gt; p:tab 时,我得到以下异常:

 javax.el.MethodNotFoundException: Method not found: org.my.Controller@2691ab6b.onAccordionPanelTabChange(javax.faces.event.AjaxBehaviorEvent)

所以 Primefaces 似乎只能为tabChange 事件设置一个侦听器。例外是指onAccordionPanelTabChange 而不是onTabViewTabChange

原来用户点击p:tabView p:tab时自动关闭当前打开的手风琴的问题有解决办法吗?

注意:这似乎是 PrimeFaces 中的一个错误:https://code.google.com/p/primefaces/issues/detail?id=3876

【问题讨论】:

  • 尝试使用 TabMenu primefaces.org/showcase/ui/tabMenu.jsf 而不是 TabView
  • 感谢您的回答,但 TabMenu 不是我需要的(它会重新加载页面)。
  • @geceo- 这是一个错误。尝试使用 AjaxBehaviorEvent 参数而不是 TabChangeEvent 的处理程序
  • 感谢您的评论。使用AjaxBehaviorEvent,异常消失,但是当我点击p:tabView &gt; p:tab时调用了错误的函数(onAccordionPanelTabChange)。

标签: javascript jquery jsf primefaces tabs


【解决方案1】:

这似乎是一个 PrimeFaces 错误,已针对 PF >= 5 修复:https://code.google.com/p/primefaces/issues/detail?id=3876

【讨论】:

    猜你喜欢
    • 2014-10-07
    • 2013-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多