Jsf 2 在JSF2托管bean中处理应用程序异常和bean验证
我正在构建一个具有多语言内容的JSF2应用程序 1) Bean验证将用于验证表单字段。我使用ValidationMessages属性文件定义特定于语言环境的错误消息,并使用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页面中,我检查“
标记在屏幕上显示正确的错误消息
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访问资源包。有