gpt4 book ai didi

显示选项卡后触发 Primefaces tabview tabChange 事件

转载 作者:行者123 更新时间:2023-12-04 00:45:15 25 4
gpt4 key购买 nike

我正在使用 Primefaces 3.5 & JSF2.1 (Mojarra) 开发一个项目

我创建了一个素面 <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 内部( View 范围)
@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从静态到动态,则行为是随机的,换句话说,对 change 事件的调用发生在 getter 中间的某个地方。

先感谢您。

最佳答案

好吧,我认为这是一个主要的 BUG,我找到了一个解决方法,如下所示

  • 不要使用全局表单(tabView 本身的表单),而是为每个选项卡使用一个表单(在它里面围绕数据表)
  • 您必须添加一个虚拟选项卡作为第一个必须包含其中一些静态数据或预加载数据的表单

  • 就这样,

    问题是 ajax 请求在全局表单中,它导致数据表在 ajax 请求之前首先获取它们的数据,
    Primefaces 的奇怪之处在于,如果您不添加第一个虚拟选项卡,它将始终执行选项卡内的第一个表单并获取其数据,这会导致问题

    问候 ,

    关于显示选项卡后触发 Primefaces tabview tabChange 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15930138/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com