Как добавить бин Spring 3 в преобразователь JSF 2 - PullRequest
7 голосов
/ 21 февраля 2011

Я пытаюсь @javax.naming.Inject bean-компонент Spring 3 с именем WtvrBean в JSF 2 @FacesConverter.

И Bean, и конвертер находятся в одном пакете.И в приложении моей весныContext.xml я сканирую этот пакет:

<context:component-scan base-package="my-package" />

Но это не работает.Конечно, внутренний класс JSF 2, который использует конвертер, определенно не находится в my-package.

Например, если я удалю @ManagedBean из JSF 2 ManagedBean и заменим его на @org.springframework.stereotype.Component или@Controller, WtvrBean можно редактировать @Inject на этом ManagedBean с помощью Spring WebFlow.

Ну, насколько я знаю, в Spring нет такого понятия, как стереотип @Converter.

Я знаю, что могу использовать

FacesContextUtils.getWebApplicationContext(context).getBean("WtvrBean")

Но при таком подходе связь между веб-приложением и пружиной становится более жесткой.(аннотации являются метаданными, и некоторые авторы даже не считают их зависимостью).

Пока что я использую FacesContextUtils, если нет лучшего решения.

Есть идеи?

Ответы [ 4 ]

13 голосов
/ 21 февраля 2011

Если вы хотите внедрить bean-компоненты в экземпляры класса, эти экземпляры должны управляться пружинами.Т.е. весна должна их инстанцировать.И этого не происходит, поэтому - нет, вы не можете вводить туда.

Но это потому, что вы регистрируете конвертер в jsf.Вы можете пропустить это:

@Component("myConverter")
public class MyConverter implements Converter { .. }

И затем, если вы используете пружину <el-resolver>:

converter="#{myConverter}"

Так что это будет сделано.Это сработало для меня.

(Обходной путь, о котором стоит упомянуть, это то, что вы можете сделать это, используя aspectj weave и @Configurable, но я бы предпочел ваш FacesContextUtils подход.переплетение изменяет классы так, что они становятся управляемыми пружиной, даже если они не созданы экземпляром весной.)

2 голосов
/ 25 октября 2012
@FacesConverter(value = "examTypeConverter")
@Named

Простой ответ.

0 голосов
/ 26 октября 2013

эй, я столкнулся с той же проблемой, что весенние бобы не впрыскиваются в JSF Converter.

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

 @ManagedBean
 @RequestScoped
 public class CustomerByName implements Converter {

      @ManagedProperty(value = "#{customerDao}")
      private CustomerDao customerDao;

и на своей странице jsf используйте его как управляемый компонент

 converter="#{customerByName}"
0 голосов
/ 21 февраля 2011

Добавьте аннотацию @Scope (например, с параметром "request") к вашему управляемому компоненту.

@ManagedBean
@Scope("request")
public class MyBean {
....
}
...