在JSF2托管bean中处理应用程序异常和bean验证



我正在构建一个具有多语言内容的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全局异常处理,无法导航到错误页面

最新更新