至于良好的用户反馈,我在webapplication中的多个站点上使用消息。
要添加消息,我只需使用:
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(type, "", message));
我为type
和message
添加了变量,因为它取决于不同的验证。
好吧,我对不同的网站使用不同的ManagedBeans
,这很正常。
我想到了,在不同ManagedBeans
中添加这些邮件的最佳做法是什么。
目前,我总是使用上面的代码片段超过30次(而且它肯定会变得越来越多)。
我应该创建一个带有SessionScoped
注释或@ApplicationScoped
的Bean吗?你有其他任何提示,我应该知道吗?
答案 0 :(得分:6)
只需将重复的静态代码隐藏到可重复使用的static
方法中,使其更加DRY(“不要重复自己”)。
以最终重构的方式设计静态方法,
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(type, "", message));
这样的事情,
Messages.addGlobalInfo(message);
或甚至使用import static com.example.Messages.*;
(Eclipse: Ctrl + Shift + M 该行):
addGlobalInfo(message);
它不需要是托管bean,因为它没有任何状态。此外,您应该创建此类实用程序类private
的默认构造函数,因此Java / JSF首先不能通过new
运算符或Class#newInstance()
反射构造它。如果您正在使用CDI,请在必要时使用@Typed
注释一个空值,以防止它通过Bean<T>
注册为托管bean候选者。
@Typed
public final class Messages {
private Messages() {}
// ...
}
JSF实用程序库OmniFaces正好具有此实用程序类:org.omnifaces.util.Messages
。
答案 1 :(得分:2)
可能只是将此代码移动到某个实用程序类:
public void static addMessage(FacesMessage.Severity type, String message){
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(type, "", message));
}
您还可以使用一个参数创建多个方法:addInfoMessage,addErrorMessage,...