在我的web jsf应用程序中,我使用此方法向用户显示不同的消息:
private void showErrorMessage(final String message) {
FacesContext.getCurrentInstance().addMessage(null,
new FacesMessage(message));
}
位于每个bean中,需要以某种方式警告用户。
现在,我想应用 DRY 规则并使用这个showErrorMessage方法创建一个静态类是静态类,但我不确定这是否安全...我的意思是< strong>静态方法vs面部上下文的实例基于会话,这会产生冲突吗?
感谢。
答案 0 :(得分:2)
我不太确定如何返回当前实例,但我敢打赌使用ThreadLocal,因此你应该使用静态方法。它基本上只是对静态getCurrentInstance()
方法的现有调用的便捷方法。
答案 1 :(得分:1)
静态方法在使用可从外部更改的可变变量时不安全。 E.g。
private static String foo; // +getter +setter
public static void foo() {
// Do something with foo.
}
这不是线程安全的。当当前线程在foo
内时,当其他线程更改foo()
时,可能会发生竞争条件。但是,您不使用任何外部可变变量。一切都被声明并使用methodlocal / threadlocal。所以这很安全。
答案 2 :(得分:1)
这种特殊的静态方法非常安全。
getCurrentInstance()返回一个线程局部的FacesContext对象。 FacesContext封装了与当前线程正在处理的请求相关的状态。另一个线程将处理不同的请求,并将获得不同的FacesContext实例。