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

时间:2014-07-30 10:22:36

标签: jsf-2 exception-handling

我正在构建一个包含多语言内容的JSF2应用程序。

1)Bean验证将用于验证表单字段。我使用ValidationMessages属性文件来定义特定于语言环境的错误消息,并使用<h:message>标记在屏幕上显示正确的错误消息。

2)对于特定于应用程序的异常,我目前有一个通用的ApplicationException,它在托管bean方法中处理。在异常catch块中,我设置了一个&#34; msg&#34; bean中带有自定义错误消息的字段(例如:&#34;无法更新库存,因为找不到匹配的产品代码&#34;)。 在xhtml页面中,我检查&#34; msg&#34; string不为空,并将其显示在页面顶部。

有没有更好的方法来处理JSF中成功和错误消息的显示? 我可以简单地在Application Bean中抛出ApplicationException并使用通用处理程序来处理异常并在相关视图中显示消息吗? 我看过https://weblogs.java.net/blog/edburns/archive/2009/09/03/dealing-gracefully-viewexpiredexception-jsf2,但我无法将其映射到我的要求

1 个答案:

答案 0 :(得分:0)

你几乎正确地做到了。组件验证的方法是要去的方法。但是,对于托管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仅显示消息似乎过于复杂。除非你使用像Omnifaces这样的第三方解决方案,否则它也不会为异步(Ajax)请求工作。

另见: