Отображение сообщения об ошибке при возникновении исключения в JSF 2.0 - PullRequest
2 голосов
/ 24 августа 2011

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

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

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

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

<rich:messages />

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

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

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

1 Ответ

0 голосов
/ 24 августа 2011

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

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

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.
    }

    // ...
}

Связанный:

...