有条件需要 a4j 形式的 jsf 验证

发布于 2024-07-22 16:56:12 字数 701 浏览 7 评论 0 原文

我在 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 只是跳过验证。

谢谢。

I'm having a little problem with using conditionally evaluated expression in jsf/a4j

Here's my code

<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>

The boolean checkbox conditionally enable/disable the validation.

This doesn't work: the a4j:commandButton simply skip the validation.

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

天荒地未老 2024-07-29 16:56:12

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

来自 RichFaces 文档的生命周期:


(来源:jboss.org)

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

我猜如果您在 ajaxSingle 属性“http://www.jboss.org/file-access/default/members/jbossrichfaces/freezone/docs/tlddoc/a4j/support.html” rel="nofollow noreferrer">aj4:support 标签,您会得到您想要的行为。文档说这只会提交控件的值,因此文本字段不会参与“应用请求值/流程验证/流程更新”阶段。

If the inputText fails validation (Process Validations phase), then the value mybean.condition will not be updated (Process Updates phase). Since the text field uses the required attribute, this is quite likely.

Lifecycle from the RichFaces doc:

alt text
(source: jboss.org)

If any JSF phase fails, the lifecycle skips to Render Response to avoid operating on invalid input. You can use the h:message and h:messages tags to view reported errors (though because you're using AJAX, you'll have to put them in something that will get re-rendered.

I am guessing that if you set the ajaxSingle attribute on the aj4:support tag, you would get the behaviour you want. The documentation says that this will only submit the value for the control, so the text field will not be involved in the Apply Request Values/Process Validations/Process Updates phases.

凤舞天涯 2024-07-29 16:56:12

mybean 的范围是什么? 如果它是请求范围,那么当您单击按钮时,它的值将被重置,并且输入字段可能会被处理(如果呈现解析为“false”)。

What is the scope of mybean? If it's request scope then its value will be reset when you click the button and the input field might be processed at all (if rendered resolves to 'false').

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文