我正在研究JSF 2.0,Richfaces 4.0。我有一个要求,当发生任何后端异常时,我需要显示错误消息。我们正在显示使用rich:dataTable的用户列表。在获取用户列表时,如果发生任何后端异常,则需要在顶部显示错误消息。
在支持bean中,我们有一个变量usersList。在getUsersList()方法中,我们调用db以获取用户列表。
<rich:dataTable value="#{myBean.usersList}>
</rich:dataTable>
每当异常发生时,我在getUsersList()方法中捕获该异常并构造FacesMessage obj并将该消息obj添加到FacesContext。我正在使用
<rich:messages />
标签显示错误消息。不显示错误消息。
有人可以帮我吗?
提前致谢。
答案 0 :(得分:0)
在bean的(post)构造函数中执行数据库交互作业而不是getter。如果<rich:messages>
位于视图之前 <rich:dataTable>
并且视图由GET请求打开和/或getter仅在渲染响应期间执行作业,那么显示消息太晚了,只是因为<rich:message>
组件已经呈现给响应。
在JSF中,getter应该包含 no 业务逻辑。它们应该只是访问bean属性的简单入口点。在豆子的生命中,它们可以不止一次被召唤。对于业务工作,您应该使用(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.
}
// ...
}