Java 未使用tabChangeListener呈现primefaces数据表
我有tabView,它包括两个选项卡和两个数据表。当选择第一个选项卡时,将显示第一个数据表,选择第二个选项卡,然后显示第二个数据表。但是我的datatable无法看到呈现的更改 这是我的xhtmlJava 未使用tabChangeListener呈现primefaces数据表,java,jsf,primefaces,datatable,tabview,Java,Jsf,Primefaces,Datatable,Tabview,我有tabView,它包括两个选项卡和两个数据表。当选择第一个选项卡时,将显示第一个数据表,选择第二个选项卡,然后显示第二个数据表。但是我的datatable无法看到呈现的更改 这是我的xhtml <p:tabView id="tabViewKullanici" dynamic="true"> <p:ajax event="tabChange" listener="#{userBean.onTabChange}" update=":userForm:userDataTab
<p:tabView id="tabViewKullanici" dynamic="true">
<p:ajax event="tabChange" listener="#{userBean.onTabChange}" update=":userForm:userDataTable,:userForm:userDataTable2"/>
<p:tab title="#{etiketler.userinfo1}" id="userinfoList1" >
</p:tab>
<p:tab title="#{etiketler.userinfo2}" id="userInfoList2">
</p:tab>
</p:tabView>
<p:dataTable id="userDataTable" rendered="#{userBean.tabIndex eq 1}"/>
<p:dataTable id="userDataTable2" rendered="#{userBean.tabIndex eq 2}"/>
Ajax渲染不是那样工作的。如果datatable是以
rendered=“false”
开头的,您尝试重新渲染它的方式将永远不会显示它。您应该在ajax监听器中执行update=“tabViewKullanici”
,谢谢您的回复。我在userBean.java中定义了布尔tabIndex。我的XHTML页面是一样的,然后它成功地工作了。
private int tabIndex;
@PostConstruct
public void init() { tabIndex = 1; }
public void onTabChange(TabChangeEvent event) {
FacesMessage msg = new FacesMessage("Tab Changed");
System.out.println("event.getTab().getId(): " + event.getTab().getId());
System.out.println("event.getTab().getTitle(): " + event.getTab().getTitle());
if((event.getTab().getId()).equals("userinfoList1") ){
tabIndex = 1;
}
if((event.getTab().getId()).equals("userinfoList2") ){
tabIndex = 2;
}
FacesContext.getCurrentInstance().addMessage(null, msg);
}
public int getTabIndex() {
return tabIndex;
}
public void setTabIndex(int tabIndex) {
this.tabIndex = tabIndex;
}