【发布时间】:2013-04-02 13:08:32
【问题描述】:
我正在使用 Primefaces 3.5 和 JSF2.1 (Mojarra) 进行项目
我创建了一个 primefaces <p:tabView id="tabsVw" dynamic="false"> 里面有两个选项卡,每个选项卡都有一个 primefaces 数据表
<h:form>
<p:tabView dynamic="false">
<p:ajax event="tabChange" listener="#{tstTab.onDtlTabChanged}" />
<p:tab title="tab1">
<p:dataTable value="#{tstTab.list1}" var="v1">
<p:column>
<h:outputText value="#{v1}"/>
</p:column>
</p:dataTable>
</p:tab>
<p:tab title="tab2">
<p:dataTable value="#{tstTab.list2}" var="v2">
<p:column>
<h:outputText value="#{v2}"/>
</p:column>
</p:dataTable>
</p:tab>
</p:tabView>
</h:form>
在 bean 内部(查看范围)
@ManagedBean
@ViewScoped
public class TstTab {
private List<String> list1;
private List<String> list2;
public TstTab(){
list1 = new ArrayList<String>();
list2 = new ArrayList<String>();
list1.add("List 1 - Str 1");
list1.add("List 1 - Str 2");
list1.add("List 1 - Str 3");
list1.add("List 1 - Str 4");
list1.add("List 1 - Str 5");
list2.add("List 2 - Str 1");
list2.add("List 2 - Str 2");
list2.add("List 2 - Str 3");
list2.add("List 2 - Str 4");
list2.add("List 2 - Str 5");
}
public void onDtlTabChanged(TabChangeEvent event) {
System.out.println("000000000000000000");
}
public List<String> getList1() {
System.out.println("11111111111111");
return list1;
}
public List<String> getList2() {
System.out.println("222222222222222222");
return list2;
}
}
现在的问题是当运行应用程序并尝试在选项卡之间导航(更改)时,但我可以看到 onDtlTabChanged 在调用 getter 之后被调用,所以这是一个大问题。
如果将tabView 从静态更改为动态,则行为是随机的,换句话说,更改事件的调用发生在 getter 中间的某个地方。
提前谢谢你。
【问题讨论】:
-
你设置了dynamic="true",那你为什么要在ajax中更新tab 1呢?
-
我有 cache="false",所以如果用户导航到第二个选项卡然后转到第一个选项卡,我必须再次重新获取数据
-
那么如果用户导航到第二个标签然后转到第三个标签?
-
我不明白你的意思,这个想法是有三个选项卡,每个选项卡都有一个数据表,每次用户单击选项卡时我都需要刷新数据,但 Primefaces 之前正在加载选项卡内容完成 changeTab ajax 事件
-
我用 Primefaces 3.5 和 jsf(morjarra 2.1.20) 进行了测试,它工作正常,所以你应该先用简单的例子测试并参考上面的代码,祝你好运!
标签: primefaces tabs tabview