2010-06-05 119 views
1

我有一個小型的JSF應用程序,用戶需要輸入有關他們自己的一些數據。 對於頁面上每個要求=「true」的組件,我想根據字段中是否有數據顯示圖標。將JSF組件的初始狀態設置爲無效

我的問題是,當頁面最初顯示時,所有字段都是有效的,即使它們中沒有任何數據。

所以我的問題是如何設置一個組件無效的基礎上,如果有數據在該領域或沒有?

頁面提交後(或組件失去焦點後)圖標顯示正常,它只在初始頁面加載時出現問題。 (即不存在後的數據)

這裏是我的需要驗證的組件XHTML:

<s:decorate id="employeeIdDecoration" template="/general/util/errorStyle.xhtml"> 
<ui:define name="label">#{messages['userdetails.employeeId']}</ui:define> 
<h:inputText value="#{authenticator.user.employeeId}" required="true"> 
    <a4j:support event="onblur" reRender="employeeIdDecoration" bypassUpdates="true"/> 
</h:inputText> 

模板:

<s:label styleClass="#{invalid?'error':''}"> 
     <ui:insert name="label"/> 
     <s:span styleClass="required" rendered="#{required}">*</s:span> 
    </s:label> 
    <span class="#{invalid?'error':''}"> 
     <s:validateAll> 
      <ui:insert/> 
     </s:validateAll> 
      <h:graphicImage value="/resources/redx.png" rendered="#{invalid}" 
          height="16" 
          width="16" 
          style="vertical-align:middle;"/> 
      <h:graphicImage value="/resources/Checkmark.png" rendered="#{!invalid}" 
          height="16" 
          width="16" 
          style="vertical-align:middle;"/> 
    </span> 

任何幫助將是讚賞。

回答

1

您可以:

  • window.onload()迭代使用javascript所有輸入和觸發blur事件
  • window.onload()呼叫<a4j:jsFunction>reRender是個父<h:panelGroup>所有的輸入。
+0

感謝Bozho 我實現了一個版本,我用A4J:jsFunction觸發驗證,而工程:) 這本來是很高興有設置組件的狀態,而不必訴諸「提交「面板(您可以在打開頁面時看到組件更改的狀態),但我可以接受此解決方案。 – mhylle 2010-06-06 06:49:55