我在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只是跳过验证。
感谢。
答案 0 :(得分:6)
如果 inputText 验证失败(进程验证阶段),则不会更新值 mybean.condition (进程更新阶段)。由于文本字段使用 required 属性,因此很有可能。
RichFaces doc的生命周期:
(来源:jboss.org)
如果任何JSF阶段失败,生命周期将跳至“渲染响应”以避免对无效输入进行操作。您可以使用h:message和h:messages标记来查看报告的错误(但是因为您使用的是AJAX,所以您必须将它们放入可以重新渲染的内容中。
我猜测,如果在aj4:support标记上设置 ajaxSingle 属性,您将获得所需的行为。文档说这只会提交控件的值,因此文本字段不会涉及Apply Request Values / Process Validations / Process Updates阶段。
答案 1 :(得分:0)
mybean的范围是什么?如果是请求范围,则单击该按钮时将重置其值,并且可能根本处理输入字段(如果呈现解析为“false”)。