JSF 2.1 - получение стратегии FacesContext

Я занимаюсь разработкой веб-приложения, где моим контроллером MVC является JSF 2.1. У меня есть несколько методов, которые основаны на

FacesContext.getCurrentInstance()

Я использую это для

  • положить / получить значения из области Flash
  • добавлять сообщения на просмотр
  • получить карту параметров запроса

Примеры:

public void addInfoMessage(String title, String description){
    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,title, description));
}

а также

public void putFlashMessage(String code, String value){
    FacesContext.getCurrentInstance().getExternalContext().getFlash().put(code, value);
}

и т.п.

Мне просто интересно, где подходящее место, чтобы поместить эти методы, если я использую это на каждом отдельном управляемом бине? Я рассматриваю два варианта:

а) создать класс "JSFUtils", где все методы являются публичными и статическими

б) создать суперкласс "ManagedBean" без объявленной области и без объявленной аннотации @ManagedBean, но с этими открытыми методами. Каждый управляемый компонент должен быть дочерним по отношению к этим классам, чтобы он наследовал эти методы.

2 ответа

Решение

Сервисный класс является рекомендуемым подходом. Вместо того, чтобы изобретать свою собственную, вы можете использовать существующую библиотеку утилит JSF, такую ​​как OmniFaces, которая имеет Faces а также Messages служебные классы для этой цели.

String foo = Faces.getRequestParameter("foo");
Messages.create(summary).detail(detail).add();
Messages.addGlobalInfo(summary); // Without detail.
Faces.setFlashAttribute(key, value);

Вы также можете абстрагировать его как "супер-бин", но его нельзя использовать повторно, и вы будете повторяться в каждом проекте JSF. Кроме того, класс может расширяться только от одного класса. Так что если вашему бобу нужно расширяться из другого суперкласса, тогда вы потерялись.

Я бы порекомендовал для этой цели служебный класс просто потому, что вы позволяете гибко расширять другие полезные классы, например те, которые имеют некоторую общую логику, которую вы хотели бы использовать в других компонентах.

Сказав это, класс JSFUtils может стать довольно загроможденным со временем со многими многими методами и может стать очень неуправляемым. Было бы лучше классифицировать методы util и поместить их в отдельные статические служебные классы.

Другие вопросы по тегам