有条件地需要以a4j形式进行jsf验证

时间:2009-05-25 10:19:06

标签: java jsf seam ajax4jsf

我在jsf / a4j

中使用有条件评估的表达式时遇到了一些问题

这是我的代码

<a4j:form>
         <h:inputText id="id1" value="#{mybean.myvalue}" size="1"
                   required="#{not mybean.condition}"
                   rendered="#{not mybean.condition}"
                   requiredMessage="Put a number in here" />

           <h:selectBooleanCheckbox value="#{mybean.condition}">
                <a4j:support event="onclick" reRender="id1"/>
            </h:selectBooleanCheckbox>

<a4j:commandButton action="#{mybean.myaction}" value="Do something" />

 </a4j:form>

布尔复选框有条件地启用/禁用验证。

这不起作用:a4j:commandButton只是跳过验证。

感谢。

2 个答案:

答案 0 :(得分:6)

如果 inputText 验证失败(进程验证阶段),则不会更新值 mybean.condition (进程更新阶段)。由于文本字段使用 required 属性,因此很有可能。

RichFaces doc的生命周期:

alt text
(来源:jboss.org

如果任何JSF阶段失败,生命周期将跳至“渲染响应”以避免对无效输入进行操作。您可以使用h:messageh:messages标记来查看报告的错误(但是因为您使用的是AJAX,所以您必须将它们放入可以重新渲染的内容中。

我猜测,如果在aj4:support标记上设置 ajaxSingle 属性,您将获得所需的行为。文档说这只会提交控件的值,因此文本字段不会涉及Apply Request Values / Process Validations / Process Updates阶段。

答案 1 :(得分:0)

mybean的范围是什么?如果是请求范围,则单击该按钮时将重置其值,并且可能根本处理输入字段(如果呈现解析为“false”)。