Я работаю над JSF 2.0, Richfaces 4.0. У меня есть требование, когда мне нужно показать сообщение об ошибке, когда возникает какое-либо внутреннее исключение. Мы показываем список пользователей, используя rich:dataTable. При получении списка пользователей, если возникает какое-либо внутреннее исключение, мне нужно показать сообщение об ошибке вверху.
В вспомогательном компоненте у нас есть одна переменная usersList. В методе getUsersList() мы вызываем базу данных, чтобы получить список пользователей.
<rich:dataTable value="#{myBean.usersList}>
</rich:dataTable>
Всякий раз, когда возникает исключение, я перехватываю это исключение в методе getUsersList(), создаю объект FacesMessage и добавляю этот объект сообщения в FacesContext. я использую
<rich:messages />
тег для отображения сообщений об ошибках. Но сообщение об ошибке не отображается.
Может ли кто-нибудь помочь мне в этом?
Заранее спасибо.
Ответ 1 · BalusC
Выполняйте работу по взаимодействию с БД в (пост)конструкторе 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.
}
// ...
}
Связанный