1

我正在努力让我的 bean 使用新的页面值进行更新。我的页面上有两个提交按钮,我根据页面处于何种模式的布尔值切换显示哪个按钮。当我的页面仅处于更新状态(无验证)时,我显示具有即时=“真”的提交按钮. 当页面处于进程模式(验证)时,我会显示没有立即 =“true”的提交按钮。我遇到的问题是当我处于更新模式(无验证)时,输入字段中的值没有在 bean 中设置。在这种模式下,我要做的就是按原样保存页面并退出。不需要验证,因为该页面上的信息还没有准备好处理或“真正使用”,如果你愿意的话。也就是说,如果我的页面处于进程模式(验证),那么一切都会按预期工作。值已提交并保存。

我还没有发布任何代码,因为我正在尝试做的事情并没有什么特别之处。我只是有一个指向简单 getter/setter 的值绑定。我的 bean 在 @ViewScope 中。

我尝试使用 BalusC 在他出色的博客文章中的示例:debug-jsf-lifecycle。在单击带有 immediate="true" 的提交按钮时,将 immediate="true" 放在输入字段上没有影响。尽管如此,我理解它的方式是 UICommand 上的 immediate=”true” 告诉应用程序是否跳过验证。将其放在输入字段上只会使验证更快地发生。我错过了什么吗?

有任何想法吗?对此的任何和所有帮助都非常感谢!

应用程序细节:
JSF 2.0.3
Tomcat 6.0.14

4

1 回答 1

1

immediate="true"并非旨在禁用验证。它旨在优先验证或完全跳过输入处理。另请参阅文章底部的摘要。

您需要通过设置required="false", 或来禁用验证<f:validator disabled="true">。这是一个假设您有一个boolean process代表表单状态的属性的示例:

<h:inputText value="#{bean.value1}" required="#{bean.process}" />
<h:inputText value="#{bean.value2}" required="#{bean.process}">
    <f:validator validatorId="someValidatorId" disabled="#{!bean.process}" />
</h:inputText>
...

这样这些字段就不是必需的,并且在process评估时不会被验证false

于 2011-09-13T01:06:21.957 回答