我有一个JSF / Richfaces页面,其中包含一个包含许多组件的表单。 其中一些组件是必需的,因此必需属性设置为true。
我有一个commandButton(C1),它调用服务器操作。根据服务器操作的结果,填充类型为h:selectOneMenu(F1)的字段。此字段是必填字段,其值可由用户手动选择或通过服务器操作填充。
在表单F1中没有值的情况下提交表单时出现问题。当然,验证失败并显示错误消息“value is required”(或者requiredMessage属性的值)。如果用户然后执行服务器操作,则使用返回的值填充F1字段并重新执行该字段。但是,似乎验证没有在客户端执行,并且该字段仍然显示为错误。即使用户手动选择了一个值,该字段仍然显示为无效。 我一直在网上搜索,但找不到类似的情况。
以下是我页面的一些摘录:
<a:region>
<s:decorate id="alField" template="#{template}">
<ui:define name="label">Al</ui:define>
<h:inputTextarea id="al" maxlength="75" valueChangeListener="#{aEntHome.clearFields}"
requiredMessage="Required" required="true" value="#{aEntHome.instance.al}" >
<f:validator validatorId="stringNotEmtyTrimmedValidator" />
<a:support event="onblur" reRender="F1Field" bypassUpdates="true" />
</h:inputTextarea>
<a:commandButton value="Search" image="img.GIF" id="searchImg"
action="#{lSearch.search}" reRender="F1Field,alField">
</a:commandButton>
</s:decorate>
</a:region>
<s:decorate id="F1Field" template="#{template}">
<ui:define name="label">F1</ui:define>
<h:selectOneMenu value="#{aEntHome.instance.f1}" required="true" >
<s:selectItems value="#{listH.f1List}" var="_c" label="#{_c.f1Code}(#{_c.f1Name})" />
<s:convertEntity />
</h:selectOneMenu>
</s:decorate>
这是用于显示字段的模板:
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:s="http://jboss.com/products/seam/taglib">
<div class="prop">
<s:label styleClass="longName #{invalid?'errors':''}">
<ui:insert name="label"/>
<s:span styleClass="required" rendered="#{required}">*</s:span>
</s:label>
<span class="value #{invalid?'errors':''}">
<s:validateAll>
<ui:insert/>
</s:validateAll>
</span>
<span class="error">
<h:graphicImage value="/img/error.gif" rendered="#{invalid}" styleClass="errors"/>
<s:message styleClass="errors"/>
</span>
</div>
</ui:composition>
有人可以建议这段代码可能出现什么问题吗?
只是为了澄清 - 我正在使用Richfaces 3.3.1
我真的很感激有关导致这种情况的任何线索。