blu*_*oot 8 jsf spring dependency-injection converter jsf-2
我正在尝试将@javax.naming.InjectSpring 3 Bean调WtvrBean成JSF 2 @FacesConverter.
Bean和Converter都在同一个包中.而且,在我的spring的applicationContext.xml中,我正在扫描这个包:
<context:component-scan base-package="my-package" />
Run Code Online (Sandbox Code Playgroud)
但这不起作用.当然,使用转换器的JSF 2内部类绝对不在my-package.
例如,如果我@ManagedBean从JSF 2 ManagedBean中删除它,并将其替换为@org.springframework.stereotype.Componentor @Controller,则WtvrBean可以@Inject使用Spring WebFlow在此ManagedBean 上编辑.
好吧,据我所知,@ConverterSpring中没有刻板印象.
我知道我可以使用
FacesContextUtils.getWebApplicationContext(context).getBean("WtvrBean")
Run Code Online (Sandbox Code Playgroud)
但是,通过这种方法,Web应用程序和弹簧之间的耦合变得更加紧密.(注释是元数据,甚至不被某些作者视为依赖).
FacesContextUtils如果没有更好的解决方案,我到目前为止使用.
有任何想法吗?
Boz*_*zho 15
如果要将bean注入类的实例,则必须对这些实例进行spring管理.即春天必须实例化它们.这不会发生,所以 - 不,你不能注射那里.
但这是因为您在jsf中注册了转换器.你可以跳过:
@Component("myConverter")
public class MyConverter implements Converter { .. }
Run Code Online (Sandbox Code Playgroud)
然后,如果你使用弹簧<el-resolver>:
converter="#{myConverter}"
Run Code Online (Sandbox Code Playgroud)
这样就可以了.它对我有用.
(一个值得一提的解决方法是你可以通过使用aspectj编织@Configurable来实现它,但我更喜欢你的FacesContextUtils方法.编织修改类,以便即使它们没有被spring弹性化,它们也会被弹簧管理.)
| 归档时间: |
|
| 查看次数: |
8805 次 |
| 最近记录: |