【问题标题】:Primefaces Tabview resetting inputsPrimefaces Tabview 重置输入
【发布时间】:2013-08-12 16:21:05
【问题描述】:

我使用 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();


}

【问题讨论】:

  • 请发布您的代码
  • 如果您想在 bean 中保存活动选项卡的索引,只需使用 p:tabView 的属性 activeIndex。你为什么要FacesContext.getCurrentInstance().renderResponse(); ?并实现标签的更新使用dynamic="true" cache="false"cache 默认为 true

标签: primefaces tabview


【解决方案1】:

尝试更改事件的调用方式。而不是 immediate=true 使用 process="@this"

改变这个:

<p:ajax event="tabChange" listener="#{docData.onTabChange}"  immediate="true"/>

到这里:

<p:ajax event="tabChange" listener="#{docData.onTabChange}"  process="@this" update="ABinput"/>

【讨论】:

  • process="@this" 无论如何都是默认值,所以immediate="true" 实际上什么都不做,而且完全没有必要。这里的问题是,在选项卡更改后,必须更新值必须更新(在本例中为重置)的视图部分。
  • 使用 immediate=true 我可以在单击按钮后保持相同的选项卡。如您所见,我对 jsf 的了解并不深入 =) 如果它运行我不接触代码
  • Primefaces 文档建议 process 的默认值为 null。 (Primefaces 用户指南 3.5 第 19 页)。它声明要在部分请求中处理的组件。我认为提交整个表单可能会触发对不属于请求的字段的验证。
【解决方案2】:

我猜你说 -dynamic="true" cache="false">- 解决了我的问题。其实我测试的程序有问题,我的问题已经解决了。我认为在我的情况下这种情况的原因 cache=false 如文档所述。谢谢。

【讨论】:

    【解决方案3】:

    查看p:tabView 上的 primefaces 文档。一方面,您拥有dynamic 属性,它指定在您选择某个标签时是否使用AJAX 加载选项卡的内容。另一方面,cache 属性指定选项卡的内容是否仅在您第一次选择选项卡时动态加载。

    因此,关于p:tabView 上的此信息设置dynamic="true" cache="false" 应该可以为您解决问题。

    另一个有趣的属性是activeIndex。如我所见,您在选项卡更改时手动设置活动选项卡的索引。如果您可以在 tabchange 上提交 tabview 并且您已设置 activeIndex="#{docData.activeTabIndex}",则将自动跟踪活动的 tabindex。如果这符合您的要求,请查看文档。

    【讨论】:

      猜你喜欢
      • 2015-01-06
      • 2021-03-03
      • 1970-01-01
      • 2012-02-28
      • 2011-07-10
      • 1970-01-01
      • 1970-01-01
      • 2021-07-06
      • 1970-01-01
      相关资源
      最近更新 更多