2012-05-11 81 views
0

我用對後:這樣如何保持同一選項卡上提交表單

<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

您可以將TabView的結合支持bean一個TabView的對象,並設置你的活動指數出現。

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

然後在myTabBean:

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

綁定不是要走的路。將activeIndex屬性與tabChange事件組合使用。 – 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。至少對於我的用例來說已經足夠了。

相關問題