2013-05-11 70 views
0

我的要求是觸發並且在按鈕單擊ajax請求並顯示出與頁面刷新驗證錯誤。另外,如果沒有錯誤,請導航到第二個視圖。下面是代碼即時嘗試。我使用jsf 2.1.7和Jboss 7.1.1 final。JSF 2 <f:ajax>與頁面導航

<h:form> 
    <h:inputText value="#{helloBean.name}"></h:inputText> 
    <h:commandButton value="Welcome Me" action="#{helloBean.goToWelcome}"> 
    <f:ajax event="click" listener="#{helloBean.goToWelcome}"></f:ajax> 
    </h:commandButton> 
</h:form> 


HelloBean.java 

@ManagedBean 
@SessionScoped 
public class HelloBean implements Serializable { 

    public String goToWelcome(){ 
     System.out.println("in goToWelcome"); 
       return "welcome"; 
    } 
} 

我在同一個文件夾welcome.xhtml如上XHTML和我能看到goToWelcome()方法也被解僱,但導航不會發生。我假設它是因爲根據spec listener屬性應該有一個帶有void返回類型的方法,並且從goToWelcome()返回的字符串被忽略。那麼有什麼方法可以達到我的要求?任何形式的幫助將不勝感激。謝謝。

回答

0

基本上,您需要從操作方法返回導航案例結果以進行導航。請注意,AJAX偵聽器無法做導航,至少直接。如果您不想執行導航,則可以僅從您的操作方法返回null。另外,如果存在轉換/驗證錯誤,導航將不會發生,並且您的操作方法也不會被調用。爲此,您需要分配一堆<h:message>或全局<h:messages>以顯示錯誤消息。

要結合它,以下就足以實現您的功能。

的觀點:

<h:form> 
    <h:messages id="messages"> 
    <h:inputText value="#{helloBean.name}" /> 
    <h:commandButton value="Do AJAX validation and navigate if necessary" action="#{helloBean.goToWelcome}"> 
     <f:ajax execute="@form" render="messages" /> 
    </h:commandButton> 
</h:form> 

豆子:

@ManagedBean 
@ViewScoped 
public class HelloBean implements Serializable { 
    public String goToWelcome(){ 
     //do business job 
     if(/* some condition met */) { 
      return null; 
     } else { 
      return "nextpage"; 
     } 
    } 
} 

對你的話題相關閱讀

  1. JSF f:ajax listener vs commandButton action;
  2. How to use both Navigation Rule and f:ajax;
  3. Communication in JSF 2.0, section "Ajax validation"
0

你可能需要redirect頁面(假設你沒有驗證錯誤,它應該工作)

return "nextpage.jsf?faces-redirect=true";