3

我咨询了几个权威来源,但要么他们真的相互矛盾,要么我误解了他们,或者可能不止一次发生了转变?JSF 的 1.x 和 2.x 版本之间有区别吗?

这篇IBM 帖子指出,转换发生在应用请求值阶段(阶段 2)。

BalusC的这篇文章在这里说默认转换发生在流程验证阶段(阶段 3)。

Oracle JEE6 教程暗示转换发生在更新模型值阶段(第 4 阶段),在此阶段的描述中说:

如果本地数据无法转换为 bean 属性指定的类型..

另一方面,说明同一教程中的各个阶段的图形显示了过程验证阶段更新模型值阶段出现的转换错误。

上述所有帖子都指出,如果该immediate属性设置为 true,则所有转换和验证都在Apply 请求阶段处理。这意味着该阶段的转换不是默认行为。

谢谢

4

1 回答 1

2

来自UIInput 的文档[强调我的]:

在请求处理生命周期的Apply Request Values阶段,必须使用 setSubmittedValue()存储此组件的解码值(通常但不一定是 String) - 但尚未转换。如果组件希望表明没有提交任何特定值,它可以不做任何事情,或者将提交的值设置为 null。

默认情况下,在请求处理生命周期的 Process Validators 阶段,提交的值将被转换为类型安全的对象,如果验证成功,则使用 setValue() 将其存储为本地值。但是,如果 immediate 属性设置为 true,则此处理将改为在 Apply Request Values 阶段结束时进行。

在请求处理生命周期的呈现响应阶段,输出转换与 UIOutput 一样发生。JSF 1.x 和 2.x 版本之间没有区别。

于 2012-10-11T10:37:23.060 回答