PostConstruct中的JSF抛出异常:如何显示消息

时间:2017-03-01 01:45:14

标签: jsf try-catch message postconstruct

JSF在bean init期间抛出异常,没有消息,什么都没有。

public class MyBean {
   @PostConstruct
   public void init() {

       try {

           // some code,
       } catch (Throwable t) {
           // if adding a facesMessage here: it did not show up either

           throw new Exception(t);
       }
   }
}


<html>
<body>
   <h:outputText value="#{mybean.value}"/>

   <f:messages />
</body>

</html>

抛出异常时,响应为空:

<html><head></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;"></pre></body></html>

如何在这种情况下显示消息让用户知道?

更新

此问题与指定的其他问题不重复。这个问题是关于在bean初始化期间抛出异常,以及如何向最终用户显示异常。

1 个答案:

答案 0 :(得分:2)

  

如何在这种情况下显示消息让用户知道?

请参阅FacesContext#addMessage

在catch块中,提供适合向用户显示的消息,这些消息不会显示任何关键应用程序或安全性详细信息。

FacesMessage facesMessage = new FacesMessage("Something went wrong"); FacesContext facesContext = FacesContext.getCurrentInstance(); facesContext.addMessage(null, facesMessage);

addMessage()的这个示例在参数1中指定null作为clientId。因此,您的<f:messages>将显示未定向到特定客户端ID的所有邮件。

要将消息定向到页面中的特定消息组件,请使用唯一ID <f:message id="idSingleMessage"/>定义此组件,并通过指定clientId将消息定向到该组件: facesContext.addMessage("idSingleMessage", facesMessage);

您还可以添加JSF Severity Levels以在邮件中呈现不同的标记样式。

最后,您可以使用日志库(如log4j或slf4j)将特定错误记录到文件中。
Apache Exception Utils可以为您简化此操作。