2012-05-11 5 views
0

を提出した後、同じタブに滞在する:このは、どのように私はPを使用していますフォーム

<ui:composition template="./WEB-INF/templates/masterTemplate.xhtml"> 
    <ui:define name="windowTitle"> 
     #{msgs.home} 
    </ui:define> 

    <ui:define name="content"> 
     <p:tabView id="tabView" dynamic="false"> 

      <p:tab id="tab1" title="#{msgs.home}"> 
       <ui:include src="/homePages/home.xhtml" /> 
      </p:tab> <!--end of tab1 --> 

      <p:tab id="tab2" title="#{msgs.join}"> 
       <ui:include src="/homePages/join.xhtml" /> 
      </p:tab> <!--end of tab2 --> 

      <p:tab id="tab3" title="#{msgs.signIn}"> 
       <ui:include src="/homePages/login.xhtml" /> 
      </p:tab> <!--end of tab3 --> 

     </p:tabView> 
    </ui:define> 
</ui:composition> 

のようなタブのビューは、ここに私のjoin.xhtmlページです

<h:body> 
    <ui:composition> 
     <div id="join" style="border-style:solid; border-width:5px; padding: 10px;" > 
      <div id="joinFormPosition" class="left"> 
       <h:form id="joinForm"> 
        <h:outputText id="joinMessgae" value="#{msgs.joinMessgae}" /> 
        <span class="asterisk">*</span><span class="labels">#{msgs.signInName}: </span> 
        <p:inputText id="name" 
           value="#{joinPage.signInName}" 
           required="true"/> 
        <p:message for="name" /> 
        ... 

        <div id="submitButton"> 
         <h:commandButton id="submitBtn" 
             value="Submit" 
             actionListener="#{join.saveUser}" /> 
        </div> 
       </h:form> 
      </div> <!--end of joinFormPosition --> 
     </div> <!--end of join --> 
    </ui:composition> 
</h:body> 

login.xhtml

<ui:composition> 

     <div id="login" style="border-style:solid; border-width:5px; padding: 10px;" > 

      <div id="loginFormPosition" class="left"> 

       <h:form id="loginForm"> 
        <h:outputText value="#{msgs.signIn}" /> 
        ..... 
        <div id="signInButton"> 
         <h:commandButton id="signInBtn" 
             value="Submit" 
             actionListener="#{login.signIn}" 
             action ="#{login.outcome}"/> 
        </div> 
       </h:form> 
      </div> <!--end of loginFormPosition --> 
     </div> <!--end of login --> 
    </ui:composition> 

私はタブに参加してフォームを送信し、検証に失敗した場合は最初のタブに切り替えます。私は、送信ボタンをクリックして、検証が失敗するかどうか、同じタブに留まるかどうかを確認したい。私はログインタブで直面している同じ状況。フォームを提出した後、同じタブにどのように滞在できますか?

おかげ

答えて

3

あなたは、バッキングBeanにtabviewオブジェクトにtabviewを結合して、そこにあなたのアクティブなインデックスを設定することができます。 myTabBeanに続いて

<p:tabView binding="#{myTabBean.messagesTab}"> 

private TabView messagesTab = new TabView(); 

public TabView getMessagesTab() { 
    return messagesTab; 
} 

public void setMessagesTab(TabView messagesTab) { 
    this.messagesTab = messagesTab; 
} 


public void someDecisionMethod(){ 
    int idx=1 
    this.messagesTab.setActiveIndex(idx); 
} 
+0

バインドする方法はありません。 tabChangeイベントと組み合わせてactiveIndex属性を使用します。 – Kukeltje

0

私はこの質問は古いです知っているが、私はちょうどprimefaces 5.2で同じ問題の年後に直面しました。特定のケースでは、たとえば、フルページではなく、タブのコンテンツの更新のみを含むいくつかのソリューションがあります。

activeTabを「覚えている」には、基本的に、ビュースコープのmanagedBeanのactiveIndexをバインドし、p:ajaxイベントリスナーを指定するだけで済みます。しかし、あなたのp:tabViewはフォームにはなく、タブ自体にはフォームがあります。https://github.com/primefaces/primefaces/issues/695最も簡単な回避策は、p:ajaxのpartialSubmitをtrueに設定しています。だから、これはactiveIndexを設定し、その結果として、タブに滞在するために必要なすべてのです:

XHTML:

<p:tabView activeIndex="#{myManagedBean.activeTabIndex}"> 
    <p:ajax event="tabChange" partialSubmit="true" /> 

myManagedBean:

//plus its getter and setter 
private Integer activeTabIndex; 

編集:それは唯一の指定には十分かもしれません<p:ajax event="tabChange" partialSubmit="true" />上記のように、activeIndexをバインドすることなく少なくとも私の使用例では十分でした。

関連する問題