2013-08-20 37 views
0

後執行的方法我有這樣的JSF代碼錯誤嘗試錯誤捕獲

<h:form> 
    <h:inputText value="#{agreement.serviceId}"/> 
    <h:commandButton value="Enter" action="#{agreement.build}" /> 
    <h:form rendered="#{!agreement.valid}"> 
     <h:outputText value="Service id not valid. Please try again"/> 
    </h:form> 
<h:form> 

這是範圍的bean的構建方法。

public String build(){ 
    try{ 
    ...//lots of backend logic 
    valid = true; 
    return "/agreementDetail.xhtml?faces-redirect=true"; 
    }catch(Exception e){ 
    valid = false; 
    return null; 
    } 
} 

基本上,這是我需要的行爲:

用戶輸入一個服務Id。如果此服務ID有效,則會將用戶重定向到agreementDetail.xhtml頁面。如果爲false,則用戶保留在main.xhtml頁面中,並呈現「Service id not valid ...」消息。

這是發生了什麼:

如果用戶輸入正確的服務ID,一切工作正常。如果用戶返回到main.xhtml並輸入了錯誤的服務ID,則錯誤顯示正確。但是現在,如果用戶輸入正確的服務ID,則不會執行build()方法(我已經通過日誌記錄證實了這一點)。

基本上,一旦用戶輸入了錯誤的值,build()方法將不會再次執行,除非用戶簽名並再次登錄。很顯然,當build()發現錯誤並捕獲異常時會發生。

任何想法?

+1

到目前爲止發佈的代碼似乎不符合問題描述。 action方法被聲明爲「private」。這應該永遠不會被執行,而是在首次調用時引發EL異常。順便說一下,你爲什麼不用#'來使用臉部信息?這種嵌套形式是一種醜陋的方法,只會導致[語法無效的HTML](http://validator.w3.org)。 – BalusC

+0

對不起,我犯了一個錯誤。該方法是公開的,我只是寫錯了。我將進行編輯以將其設置爲公開。另外,我知道更好,我只是發現這種行爲很有趣,我試圖瞭解發生了什麼。 – Nacho321

回答

0

您在代碼中嵌套表單。這在JSF/HTML中是不允許的。你應該用<h:panelGroup>代替內部表格,一切都應該沒問題。

+0

他不是從嵌套表單內部提交,所以這不太可能是原因。另見我對這個問題的評論。 – BalusC