【问题标题】:<f:attribute> not working inside <p:tab><f:attribute> 在 <p:tab> 中不起作用
【发布时间】:2017-02-06 16:50:00
【问题描述】:

我想在单击选项卡时访问我的支持 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");
}

【问题讨论】:

  • 你为什么不使用&lt;p:ajax event="tabChange" listener="#{bean.tabchangelistener}"/&gt;
  • 您的标签是嵌套的!所以我怀疑该属性是否传递给父侦听器。哎呀,它甚至不应该改变子标签
  • @Kukeltje 那么访问属性的更好方法是什么。我什至尝试在父选项卡上使用 f:attribute 仍然无法访问它
  • 你说的不是什么目的。

标签: jsf primefaces jsf-2


【解决方案1】:

我建议在这里使用带有命名空间xmlns:pt="http://xmlns.jcp.org/jsf/passthrough"的JSF传递属性的一些javascript方法

如下:

<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 函数 handleTabChangehandleTabShow 上,您可以使用一些简单的 jQuery 代码来找到您想要的选项卡,然后获取对应的data-name传递属性。

一旦你有了它,你可以触发一些 调用你想要的任何动作监听器,将字段作为参数传递,这样你就可以在动作监听器中作为请求获取它参数。

类似:

<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");

不确定这是否可行,但也许可以为您提供一些关于如何实现目标的想法...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-04
    • 2015-01-22
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多