我在我的 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客户字段的 getter 方法都在PROCESS VALIDATIONS JSF 生命周期阶段调用,然后在UPDATE MODEL VALUES生命周期中调用客户字段的 setter 方法之前调用。循环阶段。结果,在调用 getter 时,转换器未正确初始化该字段。所以顺序是这样的(其中 CustomerCEVController 是支持 bean 类):
[过程验证阶段开始 ]
[CustomerConverter#getAsObject 调用]
[CustomerCEVController#getCustomer 调用]
[过程验证阶段结束 ]
[更新模型值开始 ]
[CustomerCEVController#setCustomer 调用]
我根据日志输出的散布和我注册的生命周期侦听器报告序列。我是否遗漏了什么,如果没有,我如何确保转换器在访问之前正确设置了客户字段?