我正在构建一个具有多语言内容的JSF2应用程序。
1) Bean验证将用于验证表单字段。我使用ValidationMessages属性文件来定义特定于语言环境的错误消息,并使用<h:message>
标记在屏幕上显示正确的错误消息。
2)对于特定于应用程序的异常,我目前有一个通用的ApplicationException,它在托管bean方法中处理。在异常捕获块中,我在bean中设置了一个带有自定义错误消息的"msg"字段(例如:"由于没有找到匹配的产品代码,因此无法更新库存")。在xhtml页面中,我检查"msg"字符串是否为空,并将其显示在页面顶部。
在JSF中是否有更好的方法来处理成功和错误消息的显示?我可以简单地在托管bean中抛出ApplicationException,并使用通用处理程序来处理异常并在相关视图中显示消息吗?我阅读https://weblogs.java.net/blog/edburns/archive/2009/09/03/dealing-gracefully-viewexpiredexception-jsf2,但我无法将其映射到我的需求你做得差不多了。组件验证的方法是可行的。但是,对于托管bean逻辑,没有必要在bean中实现自定义String
属性。只需在动作方法中添加您想要的消息,它将通过h:messages
标签显示:
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
"The inventory cannot be updated as no matching product code found","");
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(null, message);
使用ExceptionHandler
来显示消息似乎过于复杂。它也不能用于异步(Ajax)请求,除非您使用第三方解决方案,如Omnifaces。
参见:
- JSF 2全局异常处理,无法导航到错误页面