我使用primeface 3.5。我有一个tabview,每个tabview都有一个带表单的inputMasks。我想在更改选项卡时重置inputMask。我监听ontabchange事件并将值重置为=“”但bean重置值但View不重置。
<p:tabView id="tabViewOS" binding="#{docData.tabView}" dynamic="true" cache="true" rendered="#{userData.opRendered}">
<p:ajax event="tabChange" listener="#{docData.onTabChange}" immediate="true"/>
<p:tab id="tab1" title="AB">
<h:form id="ABForm">
<h:panelGrid id="abgrid" columns="3" cellpadding="5">
<h:outputText value="AB NO: " />
<p:inputMask value="#{docData.abNo}" mask="999-99999999"
id="ABinput" required="true"
</p:inputMask>
<p:message id="msgAB" for="ABinput" showDetail="true" autoUpdate="true" />
<h:outputText value="" />
<p:commandButton value="GETİR" style="float:right;" ajax="false"
action="#{docData.getDoc}" />
</h:panelGrid>
</h:form>
</p:tab>
public void onTabChange(TabChangeEvent event) {
this.activeTabIndex = tabView.getChildren().indexOf(event.getTab());
FacesContext.getCurrentInstance().renderResponse();
System.out.println(this.activeTabIndex);
this.abNo="";
documents.clear();
}
答案 0 :(得分:0)
尝试更改事件的调用方式。而不是 immediate=true
使用 process="@this"
。
改变这个:
<p:ajax event="tabChange" listener="#{docData.onTabChange}" immediate="true"/>
对此:
<p:ajax event="tabChange" listener="#{docData.onTabChange}" process="@this" update="ABinput"/>
答案 1 :(得分:0)
我想如你所说--dynamic =“true”cache =“false”&gt; - 解决了我的问题。其实我测试的程序有问题,我的问题已经解决了。据我所知,在我的情况下,这种情况导致cache = false。谢谢。
答案 2 :(得分:0)
查看p:tabView
上的primefaces文档。一方面,您拥有属性dynamic
,它指定在选择某个标记时是否使用AJAX加载选项卡的内容。另一方面,属性cache
指定选项卡的内容是否仅在第一次选择选项卡时动态加载。
因此,关于dynamic="true" cache="false"
上p:tabView
设置activeIndex
的信息应该可以帮到你。
另一个有趣的属性是activeIndex="#{docData.activeTabIndex}"
。正如我所看到的那样,您在选项卡更改时手动设置活动选项卡的索引。如果您可以在tabchange上提交tabview并且已设置{{1}},则会自动跟踪活动的tabindex。如果符合您的要求,请查看文档。