Чистый способ ввести компонент Spring 3 в управляемый компонент JSF 2?

#spring #jsf-2 #annotations

#весна #jsf-2 #аннотации

Вопрос:

Я переношу наше текущее решение с JSF 1.2 на JSF 2. Поскольку мне нужно использовать новую область представления, я использую аннотации JSF 2. Это заставило меня ввести Spring beans, используя аннотацию JSF @ManagedProperty вместо Spring @Autowired

Раньше это было что-то вроде этого:

 @Autowired private OneService oneService
 

И теперь это похоже на:

 @ManagedProperty(value="#{oneServiceImpl}")
private OneService oneService
 

Знаете ли вы, есть ли способ аннотировать управляемые свойства без необходимости указывать их имя компонента?

Спасибо!

Ответ №1:

Нет, это не так. JSF использует язык выражений (EL), чтобы определить, на какой класс вы ссылаетесь по имени. Используя класс с именем ELResolver, он принимает переданную строку, интерпретирует и создает соответствующую ссылку. Класс SpringBeanFacesELResolver обеспечивает интеграцию между двумя фреймворками, перехватывает запрос и передает его в контекст Spring, который обрабатывает зависимости, необходимые для предоставления ManagedBeans, который затем передает его собственному ELResolver JSF. Таким образом, JSF нужно имя компонента, чтобы знать, что вводить.

Ответ №2:

Вы все равно можете использовать Spring с JSF 2. Просто создайте пользовательскую область Spring, которую затем можно использовать в качестве области просмотра для ваших компонентов.

 @Named @Scope("view")
public class MyBean {

    @Inject
    private MyManagedProperty oneService;

    //...

}
 

Украсть реализацию области просмотра здесь: http://cagataycivici.wordpress.com/2010/02/17/port-jsf-2-0s-viewscope-to-spring-3-0 /