我正在使用以下 spring 的 jar :
spring-web-2.5.5.jar
spring-context-2.5.5.jar
spring-core-2.5.5.jar
spring-orm-2.5.5.jar
spring-support-2.0.8.jar
spring-security-taglibs-2.0.3.jar
spring-security-acl-2.0.3.jar
spring-security-core-2.0.4.jar
spring-aop-2.5.5.jar
spring-jdbc-2.5.5.jar
spring-tx-2.5.5.jar
问题是从 JSF 1.2
迁移到 JSF 2.0
bean 后,在 faces-context 中定义的 bean 无法注入(inject)到具有 session 范围的托管 bean 中。例如:
<managed-bean>
<managed-bean-name>bannersController</managed-bean-name>
<managed-bean-class>jaxp.com.controller.BannersController</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
<managed-property>
<property-name>bannerDao</property-name>
<value>#{bannerDao}</value>
</managed-property>
</managed-bean>
和
<bean id="bannerDao" class="jaxp.com.db.dao.BannerDaoImpl"
scope="prototype">
<property name="sessionFactory" ref="sitePartnerSessionFactory" />
<property name="dataSource" ref="sitePartnerDataSource" />
</bean>
当我将 bean 的范围替换为 session 时,它会正常工作。但现在,托管属性只是空的。在我们迁移到 JSF 2.0 之前它就已经可以工作了。出了什么问题以及如何修复?
UPD:如果我将托管 bean 范围设置为查看范围,它也可以正常工作/
最佳答案
JSF bean :
inject spring service
@ManagedProperty("#{handlerService}")
private HandlerService handlerService = null;
///add setter
Spring service:
@Service("handlerService")
@Component
public class HandlerService {
@Autowired
private DomainService domainService;
faces-config.xml
<application>
<el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver>
</application>
------------
web.xml
<context-param>
<param-name>contextClass</param-name>
<param-value>
org.springframework.web.context.support.AnnotationConfigWebApplicationContext
</param-value>
</context-param>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>com.myspringconfgigclass.CommonCoreConfig</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
关于java - JSF 2.0 Spring bean 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27107503/