在ManagedBeans中避免重复代码的推荐方法是什么?



为了获得良好的用户反馈,我在我的web应用程序中使用多个站点的消息。

要添加消息,只需使用:

FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(type, "", message));

我为typemessage添加了变量,因为它取决于不同的验证。

好吧,我使用不同的ManagedBeans为不同的网站,这是正常的。

我想到了,在不同的ManagedBeans中添加这些消息的最佳实践是什么。

目前,我总是使用上面的代码片段超过30次(肯定会越来越多)。

我应该创建一个带有SessionScoped注释或@ApplicationScoped的Bean吗?你还有什么其他的提示吗,我应该知道?

只需将重复的静态代码隐藏到可重用的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,因为它不保存任何状态。此外,您应该将这样一个实用程序类的默认构造函数设置为private,这样Java/JSF就可以首先不通过反射中的new操作符或Class#newInstance()来构造它。如果您正在使用CDI,则在必要时用@Typed注释它,并使用空值,以防止通过Bean<T>将其注册为托管bean候选。

@Typed
public final class Messages {
    private Messages() {}
    // ...
}

JSF实用程序库OmniFaces有这个实用程序类:org.omnifaces.util.Messages

可以将此代码移动到某个实用程序类:

public void static addMessage(FacesMessage.Severity type, String message){
    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(type, "", message));
}

你也可以用一个参数创建几个方法:addInfoMessage, adderormessage,…

相关内容

  • 没有找到相关文章

最新更新