Отображение сообщения об ошибке при возникновении исключения в JSF 2.0

Я работаю над JSF 2.0, Richfaces 4.0. У меня есть требование, когда мне нужно показать сообщение об ошибке, когда возникает какое-либо внутреннее исключение. Мы показываем список пользователей, используя rich:dataTable. При получении списка пользователей, если возникает какое-либо внутреннее исключение, мне нужно показать сообщение об ошибке вверху.

В вспомогательном компоненте у нас есть одна переменная usersList. В методе getUsersList() мы вызываем базу данных, чтобы получить список пользователей.

<rich:dataTable value="#{myBean.usersList}>
</rich:dataTable>

Всякий раз, когда возникает исключение, я перехватываю это исключение в методе getUsersList(), создаю объект FacesMessage и добавляю этот объект сообщения в FacesContext. я использую

<rich:messages />

тег для отображения сообщений об ошибках. Но сообщение об ошибке не отображается.

Может ли кто-нибудь помочь мне в этом?

Заранее спасибо.


person Raj    schedule 24.08.2011    source источник


Ответы (1)


Выполняйте работу по взаимодействию с БД в (пост)конструкторе bean-компонента вместо геттера. Если <rich:messages> расположен в представлении перед <rich:dataTable> и представление открывается запросом GET и/или геттер выполняет работу только во время ответа рендеринга, слишком поздно отображать сообщение, просто потому что компонент <rich:message> уже был отрендерен в ответ.

В JSF геттеры не должны содержать никакой бизнес-логики. Они должны быть просто точками входа для доступа к свойствам бина. Их можно вызывать более одного раза в течение жизни бина. Для работы в бизнесе вы должны использовать методы (пост)конструктора или (действия)события.

public class Bean {

    private List<User> users;

    @EJB
    private UserService userService;

    @PostConstruct
    public void init() {
        users = userService.list(); // This will be invoked directly after bean's construction and all dependency injections.
    }

    public List<User> getUsers() {
        return users; // Look, just return the property. Do not do anything else.
    }

    // ...
}

Связанный:

person BalusC    schedule 24.08.2011