3

PrimeFaces3.3とMojarra2.17を使用しています。

を含むページがありますp:tabView。2番目のタブには、テキストボックスとが含まれていますrequired="true"。2番目のタブから最初のタブに移動すると、テキストボックスが空であることを検証し、エラーメッセージを表示します(PhaseListenerグローバルでエラーを表示するクラスがありますp:messages)。この検証をスキップする方法は?

私はで解決策を見つけることができません:

そして私はPrimeFacesを使いたくありませんp:wizard

私のtabView.xhtml:

<p:tabView id="tabView" dynamic="true" cache="false" activeIndex="0" >  
      <p:ajax event="tabChange" listener="#{test.onTabChange}"/> 
      <p:tab id="tab1" title="Tab1">
        <ui:include src="#{test.tab1}"></ui:include>
      </p:tab>
      <p:tab id="tab2" title="Tab2">  
        <ui:include src="#{test.tab2}"></ui:include>
      </p:tab>
</p:tabView>

私のJavaクラスでは:

public void onTabChange(TabChangeEvent event) {              
     this.setTab1("tab1.xhtml");
     this.setTab2("tab2.xhtml");
 }

私のtab1.xhtml:

<h:form id="form1">    
    <p:messages globalOnly="true" />
    tab1 page
    <br/>
</h:form>

私のtab2.xhtml:

<h:form id="form2">
    <p:messages globalOnly="true" />
    <p>
        tab2 page
    </p>
    <p:inputText id="txt1" required="true" />
    <p:message for="txt1" display="text" />
    <p:commandButton value="Submit" update="@form" />
</h:form>

私のPhaseListenerクラス:

public class MyPhaseListener implements PhaseListener {
    @Override
    public void afterPhase(PhaseEvent e) {
        if (e.getPhaseId() == PhaseId.PROCESS_VALIDATIONS) {
            if (FacesContext.getCurrentInstance().getMessageList().size() > 0) {
                String number = String.valueOf(FacesContext.getCurrentInstance().getMessageList().size());
                String errorMsg = "there are " + number + " errors.";
                FacesContext.getCurrentInstance().addMessage(
                        null,
                        new FacesMessage(FacesMessage.SEVERITY_ERROR, errorMsg,
                                errorMsg));
            }
        }
    }
}
4

2 に答える 2

3

次のコードを追加して問題を解決しました:
FacesContext.getCurrentInstance()。renderResponse();
backignbeanのTabChangeEventメソッドの下。

例えば:

public void onTabChange(TabChangeEvent event) {              
  this.setTab1("tab1.xhtml");
  this.setTab2("tab2.xhtml");
  FacesContext.getCurrentInstance().renderResponse();
}
于 2013-03-22T03:52:19.583 に答える
0

immediate="true"ajaxイベントタグに属性を追加します。これにより、フィールドが検証されなくなり、リスナーだけが呼び出されます。

<p:ajax event="tabChange" listener="#{test.onTabChange}" immediate="true"/>
于 2013-02-20T09:45:57.470 に答える