<f:attribute> 无法在内部工作 <p:tab>
<f:attribute> not working inside <p:tab>
我想在 click.I 使用的选项卡上访问我的支持 bean 中的一些参数,但我无法从 it.Here 的代码中获取参数:
<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");
}
我会建议一些 java 脚本方法在这里使用 JSF pass-through 属性和命名空间 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 代码来找到你想要的选项卡,并得到相应的 data-name pass-through属性。
一旦你拥有它,你可以触发一些 调用你想要的任何动作侦听器,将字段作为参数传递,这样你就可以在作为请求参数的动作侦听器。
类似于:
<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");
不确定这是否有效,但也许可以为您提供一些实现目标的想法...
我想在 click.I 使用的选项卡上访问我的支持 bean 中的一些参数,但我无法从 it.Here 的代码中获取参数:
<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");
}
我会建议一些 java 脚本方法在这里使用 JSF pass-through 属性和命名空间 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 代码来找到你想要的选项卡,并得到相应的 data-name pass-through属性。
一旦你拥有它,你可以触发一些
类似于:
<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");
不确定这是否有效,但也许可以为您提供一些实现目标的想法...