2012-01-31 57 views
0

當第一個窗體(id =「form1」)inputText沒有值時,我無法獲取tabChange事件。當我在inputText中提供一個值時,tabChange事件將觸發。這樣說真正的問題將是如何重組下面,以便onChange將在第一個選項卡的inputText爲空時觸發。我的每個選項卡都有不同的表單,因爲它們每個都具有特定於每個選項卡的數據輸入和處理。Primefaces 3.0.1 TabView p:ajax tabChange事件驗證失敗時未觸發

<html xmlns="http://www.w3c.org/1999/xhtml" 
     xmlns:h="http://java.sun.com/jsf/html" 
     xmlns:p="http://primefaces.org/ui"> 
    <h:head> 
    </h:head> 
    <h:body> 
     <p:tabView> 
      <p:ajax event="tabChange" listener="#{tabBean.onTabChange}"/> 
      <p:tab title="Tab I"> 
       <h:form id="form1"> 
        <p:inputText value="#{tabBean.inText}" required="true" requiredMessage="Required Field"/> 
        <p:commandButton value="test" actionListener="#{tabBean.submit}"/> 
       </h:form> 
      </p:tab> 
      <p:tab title="Tab II"> 
       <h:form id="form2"> 
        tab 2 content 
       </h:form> 
      </p:tab> 
     </p:tabView> 
    </h:body> 
</html> 

//Bean 
public class TabBean extends BaseSessionBean{ 
    private String inText; 

    public void onTabChange(TabChangeEvent event) { 
     FacesMessage msg = new FacesMessage("Tab Changed", "Active Tab: " + event.getTab().getTitle()); 

     FacesContext.getCurrentInstance().addMessage(null, msg); 
    } 

    public void submit(ActionEvent actionEvent){ 
     System.out.println("form submitted"); 
    } 

    public String getInText() { 
     return inText; 
    } 

    public void setInText(String inText) { 
     this.inText = inText; 
    } 
} 

一個解決方法:(刪除需要驗證)

<p:inputText value="#{adminBean.registerationLocation}"> 
         <p:ajax event="blur"/> 
        </p:inputText> 
+0

唯一的解決方法我有福了und是刪除required =「true」並驗證blur事件何時觸發inputText,以便在tabView的onChange觸發時不會驗證inputText,因爲在我的情況下表單爲空,並且用戶轉到另一個選項卡是需要的。上面更新的代碼。 – c12 2012-02-01 04:08:56

回答

-1

嘗試用AjaxBehaviorEvent

替換TabChangeEvent javax.faces.event.AjaxBehaviorEvent