javascript - Primefaces 4.0 尝试调用错误的 tabChange 事件处理程序(TabView 内的 AccordionPanel)

标签 javascript jquery jsf primefaces tabs

我有一个显示一些选项卡的页面。每个选项卡都包含一个 Accordion 。

从技术上讲,我有一个 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>

在我的 Controller 中,我有以下事件处理程序:

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

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

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

但是当我单击 p:tabView > 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时自动关闭当前打开的 Accordion 的原始问题是否有解决方案?

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

最佳答案

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

关于javascript - Primefaces 4.0 尝试调用错误的 tabChange 事件处理程序(TabView 内的 AccordionPanel),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22171214/

相关文章:

java - JSF, writeAttribute ("value", str, null) 通过 ValueExpression.getValue() 获得的字符串失败

jquery - 使用音频标签设置循环之间的延迟

javascript - min 或 gzip,哪个更好?

java - 如何使用 java 登录 JSF 页面

javascript - 从文档就绪外部调用时未定义函数

jquery - 使用 jQuery 在表中查找文本

javascript - JSF 1.2 注入(inject) javaScript 导致 w3c 验证失败

javascript - jsonp 请求在 firefox 中不起作用

javascript - 虚拟机上的 Karma 测试

javascript - 在工厂错误 : [$injector:unpr] Unknown provider: $scopeProvider <- $scope <- ProjectService <- Project 中注入(inject)服务