#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 /