我有一些业务逻辑代码根据其输出在facelet上呈现一些facesMessages,所以我在facelet托管bean中创建了一个方法,如下所示:
public void renderFacesMessages(String summary, String detail) {
FacesMessage message = new FacesMessage(summary, detail);
FacesContext.getCurrentInstance().addMessage(null, message);
}
并且业务逻辑类将根据所需的消息将参数传递给此方法,问题是业务逻辑在托管bean上调用此方法的正确方法是什么?
答案 0 :(得分:1)
关于分层概念......
我假设你有一个ManagedBean,它有一个方法可以将业务逻辑委托给一个单独的Business Class / Module。 如果是这种情况,我会告诉你,从来没有在业务方面有任何面孔方法......
而是将业务结果包装在一个类中并返回到Managed Bean。此结果类将包含结果,有关结果的元信息,如错误,异常。现在您的托管Bean可以使用renderFacesMessage方法
即使你没有遵循上述推定:我的建议 从来没有在Business Components中使用JSF Faces Logic。这将是一个糟糕的主意。
答案 1 :(得分:1)
不要让业务逻辑调用JSF支持bean。
而是让支持bean调用业务逻辑(例如EJB bean或Java EE 7中的事务CDI bean),然后根据此调用的结果(异常,返回值等)生成Faces消息和/或重定向到新页面等。
答案 2 :(得分:0)
由于businesslogic将是无状态的(我猜/希望如此),我会说你应该让调用businesslogic的托管bean处理错误信息显示,例如捕获一个例外。
另一方面,您可以将托管bean传递给businesslogic(或者更好,只是托管bean的接口),因此businesslogic可以回调托管bean。但我更喜欢第一种方法。