Я определил раздел f: metadata на моей странице xhtml, как показано ниже, с помощью 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">
(...)
.. и объявили класс CustomerConverter для параметра cust-id . В поле ПРОЦЕСС ПРОВЕРКИ . Этап жизненного цикла JSF называется ПЕРЕД методом установки для поля customer , который вызывается в жизненном цикле ОБНОВЛЕНИЕ ЗНАЧЕНИЙ МОДЕЛИ . фаза. В результате во время вызова геттера поле не инициализируется преобразователем должным образом. Таким образом, последовательность выглядит так (где CustomerCEVController - это вспомогательный класс bean-компонента):
[ НАЧАЛО ФАЗА ПРОВЕРКИ ПРОЦЕССА ]
[Вызывается CustomerConverter # getAsObject]
[Вызывается CustomerCEVController # getCustomer]
[ Фаза ПРОВЕРКИ ПРОЦЕССА КОНЕЦ ]
[ НАЧАЛО ОБНОВЛЕНИЯ МОДЕЛЬНЫХ ЗНАЧЕНИЙ ]
[CustomerCEVController # setCustomer called]
Я сообщаю о последовательности, основанной на чередовании вывода журнала и зарегистрированного мной прослушивателя жизненного цикла. Я что-то упустил, и если нет, как я могу убедиться, что поле клиента правильно настроено конвертером до того, как оно когда-либо будет доступно?
1 ответ
Последовательность абсолютно прекрасна. Я не понимаю, почему именно это создает для вас проблему. Возможно, вы занимаетесь какой-то бизнес-работой в геттере или сеттере, в то время как это вообще не относится к этим методам? Вместо этого вам понадобится <f:event type="preRenderView">
для выполнения этой бизнес-работы.
Получатель вызывается в конце фазы проверки, потому что в этот момент будет принято решение о публикации ValueChangeEvent
или нет. Для этого необходимо начальное («старое») значение, которое затем будет сравниваться с отправленным / преобразованным / подтвержденным («новым») значением. Если эти значения не равны, то оба будут переданы как «старое» и «новое» значение опубликованного ValueChangeEvent
.
Похожие вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.