JSF - два вопроса о действиях на UIComponent - PullRequest
1 голос
/ 01 декабря 2010

Итак, позвольте мне показать нам мои проблемы:)

1 - Когда я нажимаю на кнопку команды

<h:commandButton value="Somethings">
    <f:setPropertyActionListener target="#{bean.method}" value="some" />
    <f:ajax render="rendering"/>
</h:commandButton>

Я не совершаю никаких действий до commandButton.Просто я запускаю вызов Аякса.Если я добавлю действие на кнопку (например, action="bean.myAction), оно будет выполнено на 5 ° фазе жизненного цикла JSF (хорошо, только если я напишу событие = "действие" в f: ajax, но это по умолчанию).Правильно?Но f: ajax запускается нажатием на кнопку по умолчанию?Потому что для ListBox, например, он запускается, только если я пишу event = "change" (то же самое, я не должен писать это, потому что это по умолчанию).

2 - Когда я нажимаю на изображение

<h:graphicImage value="img/img.png" alt="img">
    <f:setPropertyActionListener target="#{bean.method}" value="some" />
    <f:ajax event="onclick" render="rendering"/>
</h:graphicImage>

Это не работает.Почему?

Как обычно, спасибо за помощь !!!!

1 Ответ

1 голос
/ 01 декабря 2010

1 - Когда я нажимаю на кнопку команды

Я не выполняю никаких действий с кнопкой command. Просто я запускаю вызов Аякса. Если я добавлю действие на кнопку (например, action = "bean.myAction), оно будет выполнено на 5 ° фазе жизненного цикла JSF

f:setPropertyActionListener будет выполняться и на 5-й фазе.

(хорошо, только если я пишу event = "action" в f: ajax, но это по умолчанию). Правильно? Но f: ajax запускается нажатием на кнопку по умолчанию? Потому что для ListBox, например, он запускается, только если я пишу event = "change" (то же самое, я не должен писать это, потому что это по умолчанию).

f:ajax просто меняет поведение с синхронной отправки на асинхронную (частичную) отправку. Это достигается путем генерации некоторого дополнительного кода JavaScript для требуемого атрибута события родительского компонента (например, onclick, onchange и т. Д., Смотрите сгенерированный вывод HTML в веб-браузере). Это ничего не меняет в жизненном цикле JSF. Только представленный ответ будет частичным ответом, который является именно той частью, которая должна быть обновлена ​​в компоненте (ах) с идентификатором, определенным в атрибуте render.


2 - Когда я нажимаю на изображение

Это не работает. Почему?

Поскольку h:graphicImage вообще не поддерживает f:setPropertyActionListener. Работает только в UICommand компонентах.

Вы хотите вместо этого обернуть его в h:commandLink.

<h:commandLink>
    <f:setPropertyActionListener target="#{bean.method}" value="some" />
    <f:ajax event="action" render="rendering"/>
    <h:graphicImage value="img/img.png" alt="img"/>
</h:commandLink>

(и, если необходимо, стиль границы / подчеркивания, вызванный сгенерированным <a> элементом без CSS)

...