避免在 ManagedBean 中重复代码的推荐方法是什么?
What is the recommended way to avoid repeated code in ManagedBeans?
至于良好的用户反馈,我在我的网络应用程序的多个站点上使用消息。
要添加消息,我简单地使用:
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(type, "", message));
我为 type
和 message
添加了变量,因为它取决于不同的验证。
嗯,我对不同的站点使用不同的 ManagedBeans
,这很正常。
我想到,将这些消息添加到不同 ManagedBeans
中的最佳做法是什么。
目前,我总是使用上面的代码片段超过 30 次(而且肯定会越来越多)。
我应该创建带有 SessionScoped
注释的 Bean 还是 @ApplicationScoped
?你有任何其他提示,我应该知道吗?
可能只是将此代码移至某些实用程序 class:
public void static addMessage(FacesMessage.Severity type, String message){
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(type, "", message));
}
您还可以使用一个参数创建多个方法:addInfoMessage、addErrorMessage、...
只需将重复的静态代码隐藏到可重用的 static
方法中,使其更 DRY ("Don't Repeat Yourself").
以最终可以重构的方式设计静态方法,
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(type, "", message));
像这样,
Messages.addGlobalInfo(message);
甚至 import static com.example.Messages.*;
(Eclipse:Ctrl+Shift+M 行):
addGlobalInfo(message);
它不需要是托管 bean,因为它不保存任何状态。此外,您应该将此类实用程序的默认构造函数设置为 class private
,因此 Java/JSF 首先可以不通过 new
运算符或 Class#newInstance()
构造它在反思中。如果您使用的是 CDI,请在必要时使用 @Typed
with an empty value to prevent it from being registered as managed bean candidate via Bean<T>
.
对其进行注释
@Typed
public final class Messages {
private Messages() {}
// ...
}
JSF 实用程序库 OmniFaces has exactly this utility class: org.omnifaces.util.Messages
.
至于良好的用户反馈,我在我的网络应用程序的多个站点上使用消息。
要添加消息,我简单地使用:
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(type, "", message));
我为 type
和 message
添加了变量,因为它取决于不同的验证。
嗯,我对不同的站点使用不同的 ManagedBeans
,这很正常。
我想到,将这些消息添加到不同 ManagedBeans
中的最佳做法是什么。
目前,我总是使用上面的代码片段超过 30 次(而且肯定会越来越多)。
我应该创建带有 SessionScoped
注释的 Bean 还是 @ApplicationScoped
?你有任何其他提示,我应该知道吗?
可能只是将此代码移至某些实用程序 class:
public void static addMessage(FacesMessage.Severity type, String message){
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(type, "", message));
}
您还可以使用一个参数创建多个方法:addInfoMessage、addErrorMessage、...
只需将重复的静态代码隐藏到可重用的 static
方法中,使其更 DRY ("Don't Repeat Yourself").
以最终可以重构的方式设计静态方法,
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(type, "", message));
像这样,
Messages.addGlobalInfo(message);
甚至 import static com.example.Messages.*;
(Eclipse:Ctrl+Shift+M 行):
addGlobalInfo(message);
它不需要是托管 bean,因为它不保存任何状态。此外,您应该将此类实用程序的默认构造函数设置为 class private
,因此 Java/JSF 首先可以不通过 new
运算符或 Class#newInstance()
构造它在反思中。如果您使用的是 CDI,请在必要时使用 @Typed
with an empty value to prevent it from being registered as managed bean candidate via Bean<T>
.
@Typed
public final class Messages {
private Messages() {}
// ...
}
JSF 实用程序库 OmniFaces has exactly this utility class: org.omnifaces.util.Messages
.