【问题标题】:PrimeFaces "tabChange" event with dynamic number of tabsPrimeFaces“tabChange”事件与动态选项卡数
【发布时间】:2015-02-11 13:57:10
【问题描述】:

我需要在我的 TabView 中获取当前活动选项卡的标题。 TabView 由动态数量的选项卡构成,监听器附加到“tabChanged”:

<p:tabView value="#{bean.list}" var="listItem">
  <p:ajax event="tabChange" listener="#{listenerBean.onChange}" />
  <p:tab title="#{listItem.stringProperty}">
  </p:tab>
</p:tabView>

问题是 onChange(TabChangeEvent event) 收到的 TabChangeEvent 对象总是包含第一个选项卡而不是活动选项卡。

public void onChange(TabChangeEvent event) {
    event.getTab().getTitle(); //allways returns title of first tab
}

如果我明确定义每个选项卡,则此行为仅适用于 TabView 中的动态选项卡数,TabChangeEvent 工作正常。

有什么建议吗?谢谢。

我将 PrimeFaces 3.5 与 JSF2.1 和 Servlets 2.5 一起使用

【问题讨论】:

  • 你从哪里得到这个角色?它不是双引号字符。
  • 尝试更新的版本
  • 很小,"字符只是在stackOvf编辑器中添加的,所以不是原因。 Kukeltje,我想,但不能更改版本,它是项目特定的。

标签: jsf primefaces


【解决方案1】:

以下最小示例通过打印标签的标题以在我每次单击时激活,这对我来说就像一个魅力:

page.xhtml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:f="http://xmlns.jcp.org/jsf/core"
      xmlns:p="http://primefaces.org/ui"
      xmlns:h="http://xmlns.jcp.org/jsf/html">
    <f:view>
        <h:head/>
        <h:body>
            <h:form>
                <p:tabView value="#{bean.items}"
                           var="item">
                    <p:ajax event="tabChange"
                            listener="#{bean.printTitle}"
                            update="@form"/>
                    <p:tab title="#{item}">
                    </p:tab>
                </p:tabView>
            </h:form>
        </h:body>
    </f:view>
</html>

Bean.java

import javax.faces.view.ViewScoped;
import javax.inject.Named;
import java.io.Serializable;
import java.util.Arrays;
import java.util.List;

import org.primefaces.event.TabChangeEvent;

@Named
@ViewScoped
public class Bean implements Serializable {

    private final List<String> items = Arrays.asList("Hello", "This", "Is", "TabView");

    public List<String> getItems() {
        return items;
    }

    public void printTitle(TabChangeEvent event) {
        System.out.println("title = [" + event.getTab().getTitle() + "]");
    }
}

【讨论】:

  • 什么版本? 3.5 喜欢 OP?
  • 所以我检查了你的代码但没有运气。在 WebLogic 10.3.6 上使用 PF3.5、JSF2.1、Servlet2.5 时,每次单击选项卡时都会得到相同的“title=[Hello]”。使用 PF4.0,我每次点击都会得到“title=[]”。还在Tomcat8上尝试了PF4.0、JSF2.2和Servlet3,结果是一样的:“title = []”。你能描述一下这段代码的工作设置吗?
  • 即使是 4.0 也是“旧”尝试更新
猜你喜欢
  • 1970-01-01
  • 2013-04-02
  • 2018-12-30
  • 1970-01-01
  • 2011-05-02
  • 2014-10-07
  • 1970-01-01
  • 2013-07-21
  • 2014-12-30
相关资源
最近更新 更多