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初始化期间抛出异常,以及如何向最终用户显示异常。
答案 0 :(得分:2)
如何在这种情况下显示消息让用户知道?
在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可以为您简化此操作。