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 и поместить их в отдельные статические служебные классы.