将JSF组件的初始状态设置为无效

问题描述:

我有一个小型的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> 

任何帮助将是赞赏。

您可以:

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

感谢Bozho 我实现了一个版本,我用A4J:jsFunction触发验证,而工程:) 这本来是很高兴有设置组件的状态,而不必诉诸“提交“面板(您可以在打开页面时看到组件更改的状态),但我可以接受此解决方案。 – mhylle 2010-06-06 06:49:55