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

Jsf 2 在JSF2托管bean中处理应用程序异常和bean验证,jsf-2,exception-handling,Jsf 2,Exception Handling,我正在构建一个具有多语言内容的JSF2应用程序 1) Bean验证将用于验证表单字段。我使用ValidationMessages属性文件定义特定于语言环境的错误消息,并使用标记在屏幕上显示正确的错误消息 2) 对于特定于应用程序的异常,我目前有一个在托管bean方法中处理的通用ApplicationException。在exception catch块中,我在bean中设置了一个带有自定义错误消息的“msg”字段(例如:“库存无法更新,因为找不到匹配的产品代码”)。 在xhtml页面中,我检查“

我正在构建一个具有多语言内容的JSF2应用程序

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

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

有没有更好的方法来处理JSF中成功和错误消息的显示? 我可以简单地在托管bean中抛出ApplicationException,并使用一个通用处理程序来处理异常并在相关视图中显示消息吗?
我读过,但我无法将其映射到我的需求

你做得几乎正确。组件验证的方法是要走的。然而,对于托管bean逻辑,没有必要在bean中实现自定义
字符串
属性。只需在操作方法中添加所需的消息,它将通过
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);
使用仅显示消息的方法似乎过于复杂。它也不适用于异步(Ajax)请求,除非您使用Omnifaces之类的第三方解决方案

另请参见:


谢谢@XtremeBiker。在FacesContext中设置消息时如何处理本地化?我应该为此定义一个单独的资源包吗?(除了JSF页面中使用的ValidationMessages和资源包之外)?不需要这样做,您可以在托管bean端使用EL表达式或JSF API访问资源包。有