2011-09-12 66 views
1

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

我还没有发布任何代码,因为没有什么特别的我想要做什么。我只是有一个指向简单getter/setter的值绑定。我的bean在@ViewScope中。

我已经尝试在他的优秀的blogspot文章中使用BalusC的例子:debug-jsf-lifecycle。 当用点击“提交”按钮时,在输入字段中输入immediate =“true”并没有影响,其中immediate =“true”。尽管如此,我理解它的方式是UICommand中的immediate =“true”,它告诉应用程序跳过验证或不验证。将它放在输入字段上只会使验证更快发生。我错过了什么吗?

任何想法?任何和所有的帮助,这是非常感谢!

应用细节:
JSF 2.0.3
的Tomcat 6.0.14

回答

1

immediate="true"不intented禁用验证。它的目的是优先验证或者完全忽略输入的处理。请参阅文章底部的the summary

您需要通过设置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无法通过验证。

+0

看来我是未经处理的输入的受害者。我不知道为什么,但我不知道为什么,但我不知道为什么,但我不知道为什么,在UICommand上立即=“true”,它是禁用验证,但它根本不处理这些字段......一如既往,谢谢BalusC!我希望我知道你忘记了一半:) – Mickelback

+0

不客气:) – BalusC