Primefaces选项卡视图重置输入
我使用primeface 3.5。我有一个选项卡视图,每个选项卡视图都有一个表单的输入掩码。我想在更改选项卡时重置inputMask。我侦听ontabchange事件并将值重置为=“但bean重置值,但视图不重置Primefaces选项卡视图重置输入,primefaces,tabview,Primefaces,Tabview,我使用primeface 3.5。我有一个选项卡视图,每个选项卡视图都有一个表单的输入掩码。我想在更改选项卡时重置inputMask。我侦听ontabchange事件并将值重置为=“但bean重置值,但视图不重置 <p:tabView id="tabViewOS" binding="#{docData.tabView}" dynamic="true" cache="true" rendered="#{userData.opRendered}">
<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();
}
尝试更改事件的调用方式。使用process=“@this”
代替immediate=true
更改此项:
<p:ajax event="tabChange" listener="#{docData.onTabChange}" immediate="true"/>
为此:
<p:ajax event="tabChange" listener="#{docData.onTabChange}" process="@this" update="ABinput"/>
我想正如你所说的-dynamic=“true”cache=“false”>-解决了我的问题。其实我测试的程序有问题,我的问题已经解决了。我认为在我的案例中,造成这种情况的原因正如文档所说,cache=false。谢谢。请查看p:tabView
上的primefaces文档。一方面,您有一个属性dynamic
,它指定在选择某个标记时是否使用AJAX加载选项卡的内容。另一方面,还有属性cache
,它指定是否只有在您第一次选择选项卡时才动态加载选项卡的内容
因此,关于此信息,在p:tabView
上设置dynamic=“true”cache=“false”
应该可以帮到您
另一个有趣的属性是activeIndex
。正如我看到的,您正在更改选项卡时手动设置活动选项卡的索引。如果您可以在tabchange上提交tabview,并且您已经设置了activeIndex=“#{docData.activeTabIndex}”
则会自动跟踪活动的tabindex。如果符合您的要求,请查看文档。请发布代码如果您想在bean中保存活动选项卡的索引,只需使用p:tabView
的属性activeIndex
。为什么要执行FacesContext.getCurrentInstance().renderResponse()代码>?要实现选项卡的更新,请使用dynamic=“true”cache=“false”
cache
默认为true
process=“@this”
无论如何都是默认值,因此immediate=“true”
实际上什么都不做,完全没有必要。这里的问题是,在选项卡更改后,视图中必须更新(在本例中重置)值的部分必须更新。如果immediate=true,则单击按钮后,我可以保持选项卡不变。我对jsf的了解不深,如您所见=)如果jsf运行,我不接触codePrimefaces文档表明process的默认值为null。(Primefaces用户指南3.5第19页)。它在部分请求中声明要处理的组件。我认为提交整个表单可以触发对不属于请求一部分的字段的验证。