Primefaces选项卡视图重置输入

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}">

我使用primeface 3.5。我有一个选项卡视图,每个选项卡视图都有一个表单的输入掩码。我想在更改选项卡时重置inputMask。我侦听ontabchange事件并将值重置为=“但bean重置值,但视图不重置

        <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页)。它在部分请求中声明要处理的组件。我认为提交整个表单可以触发对不属于请求一部分的字段的验证。