时究竟是
我已经定义了一个f表示
<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">
(...)
元数据我的XHTML页面上部作为与下文F所示..并宣布为卡斯特-ID参数CustomerConverter类。该属性卡斯特-ID和支持bean 客户领域的getter方法的转换器类的getAsObject方法都堪称处理验证 JSF生命周期阶段称为之前为客户的setter方法字段被称为在更新模型值生命周期的阶段。结果,在调用吸气剂的时候,转换器没有正确地初始化该区域。这样的序列是这样的(其中CustomerCEVController是支撑类):
[处理验证阶段START]
[CustomerConverter#的getAsObject称为]
[CustomerCEVController#GETCUSTOMER称为]
[处理验证相END]
[更新模型值START]
[CustomerCEVController#setCustomer称为]
我要报告基于日志输出的interspersion,我已经注册了一个生命周期监听序列。 我是否错过了一些东西,如果没有,我怎样才能确保客户的字段在转换前被转换器正确设置?
顺序是绝对的罚款。我不明白为什么这会对你造成问题。也许你在吸气剂或二道助手中做了一些商业工作,而它根本不属于这些方法?您需要一个<f:event type="preRenderView">
来代替执行该业务工作。
吸气剂是因为在那一刻决定将做出是否发布ValueChangeEvent
与否验证阶段结束时调用。为此,需要初始(“旧”)值,然后将其与提交/转换/验证(“新”)值进行比较。如果这些值不相等,则两者都将作为已发布ValueChangeEvent
的“旧”和“新”值传递。