更新:現在更新一次。我想我以前的分析是錯誤的,因爲我現在已經能夠爲此創建一個例子。它似乎與複合組件和insertChildren標記有關。cc:insertChildren內的UIInput值在驗證失敗後不會重新顯示
這是我的facelet:
<?xml version='1.0' encoding='UTF-8' ?>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:form="http://java.sun.com/jsf/composite/composite/form"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:head></h:head>
<h:body>
<h:form>
<form:workspace>
<h:inputText id="email" value="#{user.email}" size="45"
required="true" requiredMessage="Required">
<f:validateRegex pattern="([^[email protected]]+)(\.[^[email protected]]+)*@([^[email protected]]+\.)+([^[email protected]]+)" />
</h:inputText>
<h:message for="email" />
<br />
<h:commandButton action="#{user.update}" value="Update"/>
</form:workspace>
</h:form>
</h:body>
</html>
形式:工作空間複合分量被定義爲如下:
<?xml version='1.0' encoding='UTF-8' ?>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:cc="http://java.sun.com/jsf/composite">
<cc:interface>
</cc:interface>
<cc:implementation>
<cc:insertChildren/>
</cc:implementation>
</html>
的#{user}
變量指的是微不足道的豆只需字段稱爲電子郵件和getter和setter。更新方法什麼都不做。
我得到的行爲如下所述。當我輸入一個無效值時,它將恢復到它存儲在bean中的值。如果我通過form:workspace組件刪除包裝,它就像我期望的那樣工作 - 值不會被還原。 JSF的錯誤?
我有一個JSF窗體,有許多輸入組件。其中一些有驗證者附在他們身上。例如,一個簡單的是電子郵件地址,這是強制性的:
<h:inputText id="email" value="#{profile.user.email}" size="45"
required="true" requiredMessage="Required">
現在,我們已經收到了這是無效的領域應該保持提交的值在他們的要求,所以用戶不必爲簡單的拼寫錯誤重新輸入大量文本。這對我來說似乎很合理,我甚至認爲這是驗證的默認行爲。但它似乎並不是 - 價值恢復到之前的水平(當它仍然有效時)。
問題是,我什至不能找到什麼行爲應該是一個參考。我在某處讀到它是驗證後顯示的UIInput的本地值。檢查UIInput的代碼告訴我,如果驗證失敗,則故意不設置本地值。但是這似乎並不是全部真相,因爲所有輸入字段都被還原 - 不僅僅是驗證失敗的字段!所以看起來更像是它再次從模型中獲取值。
無論如何,有沒有辦法繞過這種行爲?
我正在使用JSF 2.0.4-b09。我覺得我失去了一些明顯的東西。
編輯:我將電子郵件驗證器更改爲下面發佈的正則表達式BalusC,並且我仍然得到相同的行爲。我張貼了說明問題的圖片。圖像的上半部分顯示了表單的初始狀態。然後中間的部分顯示我改變了字段「名字」,「姓氏」和「電子郵件」。底部顯示了我點擊保存按鈕後的結果。如您所見,電子郵件字段已恢復。不僅如此,名字和姓氏字段也被還原。
可能的重複:http://stackoverflow.com/questions/1953350/jsf-validation-error-lost-value –
@Zenzen:我沒有重複那個,但它似乎專門針對h:inputHidden。 – waxwing