2009-12-10 4 views
1

Какой лучший способ получить пользовательскую пост-обработку после привязки к бэк-файлу, аналогичному событию onBind при использовании контроллера Spring MVC?Как получить пользовательскую пост-обработку после привязки к бэк-файлу? Java Server Faces

Я полагаю, мне нужно PhaseListener (после значений фазы обновления модели) следующим образом

new PhaseListener() { 

    public void beforePhase(PhaseEvent event) {} 

    public void afterPhase(PhaseEvent event) { 
     // custom post-processing 
    } 

    public PhaseId getPhaseId() { 
     return PhaseId.UPDATE_MODEL_VALUES; 
    } 

} 

Это лучшая практика или нет? Если нет, что я должен использовать?

ответ

2

Ну, эта функциональность есть, поэтому вы можете использовать ее.

Если вы хотите на странице (за просмотр на самом деле) фазовый метод слушателем, используйте:

<f:view afterPhase="#{bean.afterPhase}"> 

Если вы используете Facelets, атрибут называется afterPhaseListener

2

На сервере JEE5, JSF 1.2 можно воспользоваться @PostConstruct:

реализации JSF работает в контейнере Java EE 5 совместимый должен поддерживать присоединение @PostConstruct и @Pr eDestroy аннотации, чтобы помочь в осознании управляемого цикла жизненного цикла.

Методы на управляемых компонентов, объявленных в запросе, сессии или приложения рамки, аннотированных с @PostConstruct, должен быть вызван реализацией JSF после инъекции ресурсов выполняется (если таковые имеются), но до того, как бобы помещают в объем.

+1

Или если используется интеграция jsf-spring (+1) – Bozho

+0

Полезная информация (+1) –

1

Почему вы просто не зацепите фазу INVOKE_ACTION? Обычно для этого используется метод действия компонента. Вы можете использовать UICommand компонент для запуска события, такие как h:commandLink или h:commandButton:

<h:form> 
    <h:inputText value="#{bean.input}" /> 
    <h:commandButton value="submit" action="#{bean.submit}" /> 
</h:form> 

Bean будет выглядеть следующим образом:

public String submit() { 
    // Do your thing here. The `this.input` is already set. 
    return "someNavigationCaseOutcome"; // Can even be null or void for a postback to same page. 
} 

Если вы просто хотите, чтобы покрыть все JSF POST запросы, то a PhaseListener действительно лучшее решение. Я предпочел бы зацепить beforePhaseINVOKE_ACTION, который имел бы больше смысла.

+0

Привет, BalusC. Вы сказали: почему бы вам просто не зацепить фазу INVOKE_ACTION? Потому что я использую Seam. Я видел вашу статью о жизненном цикле JSF (+1). Действительно хорошо. –

+0

Я не делаю Seam, но я не знал, что это позволяет жизненному циклу JSF вести себя по-другому? – BalusC