jsf-2 - Primefaces TabView 在第三次加载选项卡时抛出空指针

标签 jsf-2 primefaces tabs

我有一个包含三个选项卡的选项卡 View 。选项卡 View 在前两个选项卡更改中似乎可以正常工作,但在第三个选项卡更改中我得到一个空指针,如

java.lang.NullPointerException
at org.primefaces.component.tabview.TabViewRenderer.encodeEnd(TabViewRenderer.java:59)

此外,此时 TabChangeEvents 的数据为空。

使选项卡的内容最小化(只有一行文本),我可以看到选项卡的内容相互附加。一旦发生这种情况,问题就开始了。

查看 PrimeFaces source code ,似乎是在尝试使用使用生成的 tabClientId 检索的 tabToLoad 变量时。我不确定它是否应该属于处理新选项卡的逻辑分支。

我的选项卡 View 如下所示:

<p:tabView styleClass="entities-tabview" id="tabs" dynamic="true">
    <p:ajax event="tabChange" listener="#{action.onTabChange}"
            update="first-tab,second-tab"/>

    <p:tab title="First Tab" id="first-tab">
        tab one content
    </p:tab>

    <p:tab title="Second Tab" id="second-tab">
        tab two content
    </p:tab>

    <p:tab title="Other Tab" id="other-tab">
        // tab content
    </p:tab>
</p:tabView>

代码似乎检查了 TabView 上是否设置了 var 参数。由于我们不使用一个,它是空的,所以它进入新的选项卡分支。选项卡索引是在 tabview 上设置的。关于可能出错的任何想法?

经过更多调查后,我看到在选项卡上更改应更改为的选项卡是通过请求参数指定的,客户端 ID 附加了 _newTab。前两次此设置正确,但在更改回选项卡时未设置,因此无法找到选项卡和后续 NPE。

更新原因 由于选项卡是动态的,并且触发了 ajax 事件,因此选项卡发生更改,随后 ajax 更新选项卡。这似乎会导致两个选项卡都加载到同一个选项卡中的问题,这很可能会在以后弄乱参数。

但是如何实现标签页切换功能,并在标签页中显示其详细信息呢?

最佳答案

这里的问题是您让 ajax 更新了两个选项卡。 看起来,当它这样做时,选项卡的状态会变得困惑,最终您会将两个选项卡的内容合二为一。

您可以通过将内容插入 h:panelGroup 并更新 panelgroup 而不是选项卡来解决这个问题

下面的例子

<p:tabView styleClass="entities-tabview" id="tabs" dynamic="true">
  <p:ajax event="tabChange" listener="#{action.onTabChange}"
        update="one-content,two-content,other-content"/>

  <p:tab title="First Tab" id="first-tab">
    <h:panelGroup display="block" id="one-content">
     tab one content
    </h:panelGroup>
  </p:tab>

  <p:tab title="Second Tab" id="second-tab">
    <h:panelGroup display="block" id="two-content">
     tab two content
    </h:panelGroup>
  </p:tab>

  <p:tab title="Other Tab" id="other-tab">
    <h:panelGroup display="block" id="other-content">
     // tab content
    </h:panelGroup>
  </p:tab>
</p:tabView>

关于jsf-2 - Primefaces TabView 在第三次加载选项卡时抛出空指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24880208/

相关文章:

web-services - 如何使用 JAX-RS Web 服务打开 JSF 页面?

java - PrimeFaces 3.0 : How to change tab focus with `<p:tabView>`

jsf - 将图标添加到 p :panel?

android - 使用 Sherlock 更改操作栏选项卡中的字体样式

php - 删除操作无法删除默认的 WooCommerce Hook 函数

jquery - 宽度 jquery 选项卡

jsf-2 - Prettyfaces 与 jsf 集成时遇到问题

jQuery-UI 与 RichFaces 4 集成

jsf - 动态 <ui :include src> depending on <ui:repeat var> doesn't include anything

java - dataTable sortBy 函数不起作用(primefaces)