嗯!
我遇到了一种情况,尝试使用 p:message
显示 getter 中引发的异常的错误消息。但这会导致消息“警告:有一些未处理的 FacesMessage,这意味着并非每个 FacesMessage 都有机会被渲染。”
。
我执行以下操作将消息附加到 FacesContext:
FacesContext.getCurrentInstance().addMessage(cliendId, getFacesMessage(severity, msgKey, args));
我认为该消息无法呈现,因为在 getter 中创建消息发生在渲染它为时已晚的阶段......
有没有办法在 getter 中而不是在操作中创建消息? 也许可以重置渲染阶段?
最佳答案
I need to load data from a foreign system. I acccess the foreign server in the bean-getters. In case of an networkerror, I want to show an errormessage
用 getter 方法完成业务工作是错误的方法。在 JSF 托管 bean 中,getter 除了返回数据或至少对已经可用的属性进行一些预先计算之外不应该执行任何其他操作。您不应该在 getter 方法内分配属性值,或者它必须用于延迟加载。
在 View 渲染期间调用 getter。在您的特定情况下,显然是在 <p:messages>
之后调用 getter。已渲染,因此它永远没有机会显示稍后添加的面孔消息。
将业务作业移至支持 bean 的(后)构造函数或(操作)监听器方法。
例如在后构造方法中:
@PostConstruct
public void init() {
try {
data = loadFromWebservice();
} catch (SomeException e) {
log(e);
addFacesMessage();
}
}
您当然也可以移动 <p:messages>
到页面的最底部(如有必要,使用 CSS 重新定位),但这更多的是一种解决方法,而不是解决方案。
另请参阅:
关于java - 显示 getter 中发生的错误的错误消息,而不是操作中发生的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8833768/