2015-12-20 35 views
1

當驗證沒有通過時,我在輸入字段旁邊顯示一個小圖標。我能做到這一點,但我希望比我目前有一個更好的解決方案:jsf component.valid第一次進入頁面

<p:inputText ... binding="#{myfield}"> 
    <f:validator binding="#{myfieldValidator}"/> 
    <f:ajax event="blur" render="myfieldFeedback"/> 
</p:inputText> 


<h:panelGroup id="myfieldFeedback"> 
    <div class="failedIndicator colorRed" jsf:rendered="#{myFieldvalidator.isIndicatorvisible.myFieldfailed}">!</div> 
    <div class="successIndicator" jsf:rendered="#{myFieldValidator.isIndicatorVisible.myFieldSuccess}">v</div> 
</h:panelGroup> 

用我的驗證裏面:

private Map<String, Boolean> isIndicatorVisible; 
    isIndicatorVisible.put("myFieldSuccess", false);//if validation succeeds goes to true 
    isIndicatorVisible.put("myFieldFailed", false);// opposite of above 

,我希望有一個更好的解決方案(即不使用地圖)如下:

<h:panelGroup id="myfieldFeedback"> 
    <div class="#{myfield.valid ? 'successIndicator' : 'noDisplay'}">v</div> 
    <div class="#{myfield.valid ? 'noDisplay' : 'failedIndicator colorRed'}">!</div> 
</h:panelGroup> 

該字段在首次包含顯示窗體的對話框時有效。因此有一個有效的反饋信息顯示出來,我不希望這樣做。

+0

你可以嘗試的

回答

1

因此,您希望確保條件僅在回發請求期間進行評估,而不是在初始(GET)請求期間進行評估。你可以通過FacesContext#isPostback()來檢查。

<h:panelGroup id="myfieldFeedback"> 
    <ui:fragment rendered="#{facesContext.postback}"> 
     <div class="...">v</div> 
     <div class="...">!</div> 
    </ui:fragment> 
</h:panelGroup> 
+0

謝謝,儘管因爲我的對話框是動態的,我是不會使用的。我想我只是在我的bean或其他東西中放一個櫃檯。無論如何,我們都很高興。 – Ced

+0

如果初始請求本身也是一個回發(例如因爲它在對話框內),那麼你就會相應地改變'rendered'屬性中的條件,例如,檢查提交/按下哪個表單和/或按鈕。 – BalusC

+0

這聽起來比我的地圖indd更好 – Ced