【发布时间】:2012-07-31 07:56:31
【问题描述】:
我在我的 xhtml 页面上定义了一个 f:metadata 部分,如下所示,其中一个 f:viewParam 如下所示:
<html xmlns="http://www.w3.org/1999/xhtml" (...)>
<f:metadata>
<f:viewParam name="cust-id" value="#{CustomerCEVController.customer}"
converter="#{customerConverter}" converterMessage="blah blah."
required="false"
/>
</f:metadata>
<ui:composition template="/templates/commonLayout.xhtml">
<ui:define name="title">
(...)
<ui:define name="body">
(...)
.. 并为 cust-id 参数声明了一个 CustomerConverter 类。 cust-id 属性的转换器类 getAsObject 方法和支持 bean customer 字段的 getter 方法都在 中调用过程验证 JSF 生命周期阶段称为 BEFORE 在 UPDATE MODEL VALUES 生命周期中调用的 customer 字段的 setter 方法阶段。结果,在调用 getter 时,转换器未正确初始化该字段。所以顺序是这样的(其中 CustomerCEVController 是支持 bean 类):
[ 过程验证阶段开始 ]
[ 调用 CustomerConverter#getAsObject ]
[ CustomerCEVController#getCustomer 已调用 ]
[ 过程验证阶段结束 ]
[ 更新模型值开始 ]
[CustomerCEVController#setCustomer 被调用]
我根据日志输出和我注册的生命周期侦听器的散布报告序列。 我是否遗漏了什么,如果没有,我如何确保转换器在访问之前正确设置了客户字段?
【问题讨论】:
标签: java jsf lifecycle viewparams