Java 在JSF中,值转换到底什么时候发生?

Java 在JSF中,值转换到底什么时候发生?,java,jsf,jakarta-ee,jsf-2,java-ee-6,Java,Jsf,Jakarta Ee,Jsf 2,Java Ee 6,我曾咨询过几位权威人士,但要么他们真的相互矛盾,要么我误解了他们,要么可能发生了不止一次的转化?JSF的1.x版本和2.x版本之间有区别吗 这表明转换发生在应用请求值阶段(阶段2) 这表示默认转换发生在流程验证阶段(第3阶段) 这意味着转换发生在更新模型值阶段(阶段4),在该阶段的描述中表示: 如果本地数据无法转换为bean属性指定的类型 另一方面,说明同一教程中各阶段的图形显示了过程验证阶段和更新模型值阶段出现的转换错误 上述所有帖子都指出,如果immediate属性设置为true,则所有转换

我曾咨询过几位权威人士,但要么他们真的相互矛盾,要么我误解了他们,要么可能发生了不止一次的转化?JSF的1.x版本和2.x版本之间有区别吗

这表明转换发生在应用请求值阶段(阶段2)

这表示默认转换发生在流程验证阶段(第3阶段)

这意味着转换发生在更新模型值阶段(阶段4),在该阶段的描述中表示:

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

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

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

谢谢[我的重点]:

在请求处理生命周期的应用请求值阶段,必须使用setSubmittedValue()存储此组件的解码值(通常但不一定是字符串),但尚未转换。如果组件希望指示未提交任何特定值,则可以不执行任何操作,或者将提交的值设置为null

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

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


+1谢谢,Adam-这些文档是我没有咨询过的权威来源:)除了UIInput文档中的内容之外,我还需要一些澄清-IBM post在应用请求值阶段的转换是明显错误的还是有其他问题?Oracle图形中的两个箭头是什么?根据UIInput文档,在更新模型值阶段没有进一步的转换,那么怎么会有任何转换错误呢?IBM的文章在这一点上是完全错误的。甲骨文的教程很好,只是“转换”一词在句子的上下文中放错了位置。最好将其理解为“强制”或“强制”(这里的工作是EL,而不是JSF
Converter
):“如果无法将本地数据强制转换为bean属性指定的类型”。请注意,Oracle的教程确实在验证阶段一节中明确提到了转换。@BalusC感谢您的澄清。我还发现了您在验证阶段提到的部分:
JavaServer Faces实现还完成了输入组件的转换,这些组件没有将immediate属性设置为true
——我第一次忽略了它,我很惊讶蓝色巨人会犯这样的错误