2011-03-15 93 views
2

試圖顯示一個必需消息用於密碼字段,但它不能與Ajax一起使用,一旦輸入密碼消失。
目前它完全由需要h:inputSecret的屬性,但是在做HTTP提交之前Ajax會好很多。
相關摘錄:Ajax不能與h一起工作:inputSecret

<h:inputSecret id="newPassword" 
       value="#{changePassword.password}" 
       autocomplete="off" 
       required="true" 
       requiredMessage="#{i18n['javax.faces.component.UIInput.REQUIRED']}"> 
      <f:ajax event="blur" 
        render="@this Password_Message"/> 
</h:inputSecret> 
<h:message id="Password_Message" for="newPassword" errorClass="error" 
      tooltip="true" /> 

用這究竟是爲什麼非常讚賞,還在學習JSF 2.0 :)

+0

所以,驗證是可以的。但唯一的問題是該領域重新設置? – bluefoot 2011-03-15 15:37:31

+0

確認無誤,因爲輸入密碼並嘗試輸入確認後,輸入的密碼消失。 – camiloqp 2011-03-15 15:45:48

回答

3

你已添加到render="@this"導致的輸入元素的說明解釋的答案當一個jax請求完成時,整個input元素將被重新渲染。默認情況下,由於安全原因,表單提交後,<h:inputSecret>值不會重新顯示。該tag documentation還告訴它從字面上:

呈現組件的當前值的「值」屬性的值,當且僅當在「重新顯示」組件屬性字符串「true」。

同樣的故事適用於ajax rerendering的<h:inputSecret>字段。但是,您可以通過添加redisplay="true"強制重新顯示。

<h:inputSecret redisplay="true"> 
    <f:ajax event="blur" render="@this messageid" /> 
</h:inputSecret > 

或者只是擺脫render="@this",因爲這實質上是完全沒有必要的。

<h:inputWhatever> 
    <f:ajax event="blur" render="messageid" /> 
</h:inputWhatever> 
+0

「默認情況下,由於安全原因,表單提交後密碼字段值不會重新顯示。」這正是我一直在尋找的東西,非常感謝! – camiloqp 2011-03-15 16:19:20

+0

不客氣。請注意,我改進了一些答案以添加一些文檔鏈接。 – BalusC 2011-03-15 16:19:46