<f:attribute>无法在<p:tab>中工作

时间:2017-02-06 16:50:00

标签: jsf primefaces jsf-2

我想在tab click上访问我的支持bean中的一些参数。我使用但是我无法从中获取参数。这是我的代码:

<p:tabView>
<p:ajax event="tabChange" listener="#{maintab.tabchangelistener}" />
<c:forEach items="#{maintab.random}" var="field">
    <p:tab title="Title">
        <p:tabView  prependId="false" cache="false" dynamic="true">
            <p:tab title="ABC" style="outline: 0;">
                <f:attribute name="parameter" value="#{field.name}"/>
            </p:tab>
        </p:tabView>
    </p:tab>
</c:forEach> 
</p:tabView>

我的tabchangelistener函数是:

public void tabchangelistener(TabChangeEvent event){
    String par=(String)event.getTab().getAttributes().get("parameter");
}

1 个答案:

答案 0 :(得分:0)

我建议使用JSF传递属性和命名空间 xmlns:pt =“http://xmlns.jcp.org/jsf/passthrough”

如下所示:

<p:tabView 
 onTabChange="handleTabChange(index)"
 onTabShow="handleTabShow(index)">
  <c:forEach items="#{maintab.random}" var="field">
     <p:tab title="Title">
        <p:tabView  prependId="false" cache="false" dynamic="true">
            <p:tab title="ABC" style="outline: 0;" pt:data-name="#{field.name}" />
        </p:tabView>
     </p:tab>
  </c:forEach> 
</p:tabView>

然后,在 javascript 函数 handleTabChange handleTabShow 上,您可以使用一些普通的jQuery代码来查找所需的标签,以及获取相应的 数据名称 传递属性。

一旦拥有它,你就可以触发一些&lt; p:remoteCommand&gt; 调用你想要的任何动作监听器,将该字段作为参数传递,这样你就可以将它作为一个参数传递到动作监听器中请求参数。

类似的东西:

<p:remoteCommand name="remoteTabActionListener" actionListener="#{maintab.tabActionlistener}" />

function handleTabShow(index) {
    var pass_through_field = $("expression to find the correct tab").attr("data-name");
    remoteTabActionListener([{name: 'my_field', value: pass_through_field}]);
}

最后,在您的java动作侦听器中,您可以检索字段:

FacesContext fc = FacesContext.getCurrentInstance();
Map<String, String> params = fc.getExternalContext().getRequestParameterMap();
String page = params.get("my_field");

不确定这是否有效,但也许可以就如何实现目标提供一些想法......