Управляемая инъекция bean-объекта JSF - PullRequest
2 голосов
/ 07 декабря 2011

Я разрабатываю веб-приложение с jsf2, spring и hibernate.

У меня есть управляемый bean-объект "application scoped" (называемый "utilsJSF") с помощью таких утилит JSF, как:

  • Чтение файлов свойств для получения сообщения от его ключа (с использованием getBundle).
  • Добавление строки в качестве сообщения лица, которое будет показано позже в представлении.
  • и т. Д.

Я внедряю этот bean-компонент в свой «Базовый контроллер» (как «управляемое свойство»), чтобы все мои контроллеры расширяли его и могли получать доступ к этим утилитам.Здесь у меня нет проблем.

Но как я могу использовать эти утилиты из других классов, которые не являются "управляемыми компонентами"?

Я объясню себе:

У меня естьиерархия исключений, где каждый конкретный класс исключений должен обращаться к комплекту ресурсов (файлу свойств), где ключ - это имя исключения, а значение - это сообщение, которое я покажу пользователю.Конструктор исключения получает значение из файла, сохраняет его в поле исключения, а затем контроллер показывает сообщение пользователю в виде сообщения faces.

Я могу показать сообщение от контроллера, используя "utilsJSF "управляемый бин, потому что я внедрил его в BaseController.

Но я не могу внедрить" utilsJSF "в класс исключений для его использования (поскольку классы исключений не являются управляемыми бинами).

Как лучше всего решить эту проблему?

1 Ответ

2 голосов
/ 07 декабря 2011

Вы должны реорганизовать все эти служебные методы (те, которые являются (или могут быть)) public static) в служебный класс real , а не хранить его в компоненте приложения.

public final class Faces {

    private Faces() {
        // Prevent construction.
    }

    public static void addGlobalInfoMessage(String summary) {
        FacesContext.getCurrentInstance().addMessage(null,
            new FacesMessage(FacesMessage.SEVERITY_INFO, summary, null));
    }

    // ...
}

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

...