我咨询了几个权威消息来源,但要么是真的互相矛盾,要么是我误解了它们,或者可能有不止一次转换? JSF的1.x和2.x版本之间是否存在差异?
此IBM post表示转化发生在应用请求值阶段(阶段2)。
此post by BalusC表示here默认转化发生在流程验证阶段(阶段3)。
Oracle JEE6 tutorial意味着转换发生在更新模型值阶段(阶段4),在此阶段的描述中说:
如果本地数据无法转换为bean属性指定的类型..
另一方面,说明同一教程中阶段的图表显示了流程验证阶段和更新模型值阶段中出现的转换错误。
以上所有帖子均指出,如果immediate
属性设置为true,则会在应用请求阶段中处理所有转化和验证。这意味着该阶段的转换不是默认行为。
谢谢
答案 0 :(得分:2)
来自UIInput's documentation [强调我的]:
在请求处理生命周期的应用请求值阶段,必须存储此组件的解码值,通常但不一定是String,但尚未转换 - 使用setSubmittedValue()。如果组件希望表明没有提交特定值,则它可以不执行任何操作,或将提交的值设置为null。
默认情况下,在请求处理生命周期的 Process Validators阶段,提交的值将转换为类型安全对象,如果验证成功,则使用setValue()存储为本地值。但是,如果将immediate属性设置为true,则此处理将在Apply Request Values阶段结束时发生。
在请求处理生命周期的渲染响应阶段,输出转换与UIOutput一样。 JSF 1.x和2.x版本之间没有区别。