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初始化期间抛出异常,以及如何向最终用户显示例外。
如何显示消息在这种情况下让用户知道?
请参阅faceScontext#addMessage
在您的捕获块中,提供适合用户显示的消息,这些消息不会揭示任何关键的应用程序或安全详细信息。
FacesMessage facesMessage = new FacesMessage("Something went wrong");
FacesContext facesContext = FacesContext.getCurrentInstance();
facesContext.addMessage(null, facesMessage);
AddMessage()的此示例将NULL指定为参数一中的clientId。因此,您的<f:messages>
将显示所有未针对特定客户端ID的消息。
要将消息引导到页面中的特定消息组件,然后通过指定客户端来定义使用唯一ID <f:message id="idSingleMessage"/>
的组件,并将消息直接发送到它。 facesContext.addMessage("idSingleMessage", facesMessage);
您还可以添加JSF严重性级别以在消息中呈现不同的标记样式。
最后,您可以使用日志记录库(例如log4j或slf4j)将特定错误记录到文件中。
apache Exception utils可以为您简化这一点。