2013-08-20 50 views
1

假設我有一個名爲「Success」的布爾變量。默認情況下,該值爲false。基於bean屬性動態渲染組件

即如果「成功」爲真,我會渲染一個按鈕。如果「成功」是錯誤的,我呈現一個outputText。 「成功」的價值取決於用戶在inputText字段上輸入的內容。如果它與6位數字不同,那麼「成功」是錯誤的。

這可能嗎?

回答

2

是的,這是可能的。您只需確保在輸入字段中輸入ajax將提交給服務器端,以便JSF可以執行驗證和呈現工作。您可以使用<f:ajax event="keyup">。然後,您可以將輸入綁定到Integer屬性以將其轉換/驗證爲有效數字。然後,您可以使用<f:validateLongRange>來驗證號碼範圍。

這裏有一個開球例如:

<h:inputText binding="#{input}" value="#{bean.number}" maxlength="6"> 
    <f:validateLongRange minimum="100000" maximum="999999" /> 
    <f:ajax event="keyup" render="buttonOrText" /> 
</h:inputText> 
<h:panelGroup id="buttonOrText"> 
    <h:commandButton value="button" rendered="#{facesContext.postback and input.valid}" /> 
    <h:outputText value="text" rendered="#{not (facesContext.postback and input.valid)}" /> 
</h:panelGroup> 

請注意,我沒有使用任何success布爾因爲這是在這種特殊情況下不必要的。渲染所需的信息已經在EL範圍和JSF組件狀態中可用。這裏,FacesContext#isPostback()只返回true如果執行表單提交(ajax提交也計爲回發)。如果回發未在組件上導致轉換/驗證錯誤,則UIInput#isValid()僅返回true。操作方法不應以任何方式執行轉換/驗證。

+0

你搖滾!再次感謝! – Nacho321

+0

不客氣。 – BalusC