2013-06-10 2 views
0

이것은 처음 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 

내 게시물이 너무 긴 경우 죄송합니다! 미리 제안 해 주셔서 감사합니다.

베일

+0

먼저 'BeanUtente'가 올바르게 인스턴스화되었는지 확인해야합니다. 그런 다음 [@ Component'와'@ManagedBean'을 혼합하는 것도 권장하지 않습니다] (http://stackoverflow.com/questions/14144581/jsf-spring-managedbean-postconstruct-not-called) – kolossus

답변

0

귀하의 ManagedBean은이 "홈페이지"라는, 아직 당신이 "beanUtente"으로 이름으로 그것을 참조한다.

어느 변화 @ManagedBean(name="homepage")

@ManagedBean(name="beanUtente") 또는 @ManagedProperty(value = "#{homepage}")@ManagedProperty(value = "#{beanUtente}")을 변경.