이것은 처음 stackoverflow에서 ... 만나서 반가워요! jsf 2.0 + primefaces 3.5 및 spring 3.1을 사용하는 웹 응용 프로그램을 개발 중입니다. 그래서 ... 관리되는 빈에 스프링 서비스를 주입해야하며 세션에 로그인 한 사용자를 나타내는 BeanUser를 넣을 것입니다. 봄부터 jsf까지의 DI가 정상적으로 작동하지만 ... @SessionScope 관리 빈을 이해하지 못합니다. 코드를 게시하고 도움을 바랍니다!JSF 2.0 + Spring 3.1
내 applicationContext.xml
<!-- To enable the configuration based on annotations -->
<context:annotation-config base-package="it.valentina.eventiCinofili" />
<!-- To load ManagedBean as Component -->
<context:component-scan base-package="it.valentina.eventiCinofili" />
<!-- To enable the configuration of transactional behavior based on annotations -->
<tx:annotation-driven transaction-manager="transactionManager"/>
<!-- LOB HANDLER -->
<bean id="defaultLobHandler" class="org.springframework.jdbc.support.lob.DefaultLobHandler" lazy-init="true"/>
<!-- DATASOURCE -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://xxxxxxxx:xxxx/dbinstance_262_1" />
<property name="username" value="xxxxxx" />
<property name="password" value="xxxxx" />
</bean>
<!-- SESSION FACTORY -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="packagesToScan" value="it.valentina.eventiCinofili" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>/it/valentina/eventiCinofili/hbm-mapping/Utente.hbm.xml</value>
</list>
</property>
</bean>
<!-- TRANSACTION MANAGER CONFIG -->
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
내 얼굴-설정
<?xml version="1.0"?>
<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
version="2.0">
<application>
<resource-bundle>
<base-name>it.valentina.eventiCinofili.resourceBundles.ApplicationResourceLabel</base-name>
<var>ApplResLbl</var>
</resource-bundle>
<resource-bundle>
<base-name>it.valentina.eventiCinofili.resourceBundles.ApplicationResourceMsg</base-name>
<var>ApplResMsg</var>
</resource-bundle>
<!-- SPRING CONFIG -->
<el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver>
</application>
내 CommonHeader
@Component
@ManagedBean(name="commonHeader")
@RequestScoped
public class CommonHeader extends BaseBeanManaged implements Serializable {
private static final long serialVersionUID = 1L;
Logger log = Logger.getLogger(this.getClass());
@Autowired
private UtenteMgmtService utenteMgmtService;
@ManagedProperty(value = "#{beanUtente}")
BeanUtente beanUtente;
...........
public BeanUtente getBeanUtente() {log.info("CommonHeader --> getBeanUtente(): "+beanUtente); return beanUtente;}
public void setBeanUtente(BeanUtente beanUtente) {this.beanUtente = beanUtente;}
내 BeanUtente
@ManagedBean(name="homepage")
@SessionScoped
public class BeanUtente implements Serializable{
......
......
}
내 JSP
<p:panelGrid columns="2">
....
<p:column>
<p:inputText id="username" value="#commonHeader.beanUtente.utenteCorrente.username}" required="true" requiredMessage="#{username_required}" feedback="true" />
</p:column>
.....
</p:panelGrid>
내 스택 트레이스
An Error Occurred:
/pages/commons/commonHeader.xhtml @30,170 value="# {commonHeader.beanUtente.utenteCorrente.username}": Target Unreachable, 'beanUtente' returned null
내 게시물이 너무 긴 경우 죄송합니다! 미리 제안 해 주셔서 감사합니다.
베일
먼저 'BeanUtente'가 올바르게 인스턴스화되었는지 확인해야합니다. 그런 다음 [@ Component'와'@ManagedBean'을 혼합하는 것도 권장하지 않습니다] (http://stackoverflow.com/questions/14144581/jsf-spring-managedbean-postconstruct-not-called) – kolossus