2017-10-01 1 views
0

Nous convertissons une application de jsf 1.2 en jsf2 dans wildfly 10, en utilisant le ressort 3.1.1 et le mojarra 2.1.29-08. Ce faisant, nous obtenons une erreur de portée comme:Portée de ressort non reconnue par JSF

The scope of the object referenced by expression #{configConstant}, request, is shorter than the referring managed beans (UserSearchBean) scope of view 

Dans nos visages-config.xml, nous définissons comme UserSearchBean:

<managed-bean> 
    <managed-bean-name>UserSearchBean</managed-bean-name> 
    <managed-bean-class>com.mycompany.UserSearchBean</managed-bean-class> 
    <managed-bean-scope>view</managed-bean-scope> 
    <managed-property> 
     <property-name>configConstant</property-name> 
     <value>#{configConstant}</value> 
    </managed-property> 
</managed-bean> 

et applicationContext.xml nous avons:

<import resource="../aaconfig.xml" ></import> 

Et dans ce fichier aaconfig nous avons:

<bean id="configConstant" scope="singleton" 
    class="com.mycompany.ConfigConstant" > 
    <property name="fileName"> 
     <value>config.xml</value> 
    </property> 
    <property name="logofilename" value="${config.logofilename}" /> 
</bean> 

D'après ce que nous avons lu, la portée singleton devrait être globale, mais le message d'erreur de wildfly indique le contraire. Nous avons ces derniers dans web.xml

 <listener> 
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 
<listener> 
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class> 
</listener> 
    <context-param> 
<param-name>contextConfigLocation</param-name> 
<param-value>classpath:applicationContext.xml</param-value> 
</context-param> 
<servlet> 
<servlet-name>Faces Servlet</servlet-name> 
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
<async-supported>true</async-supported> 
</servlet> 
<servlet> 
<servlet-name>accessaudit</servlet-name> 
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
<load-on-startup>1</load-on-startup> 

Je viens de réaliser que d'autres haricots fonctionnent très bien, comme celui-ci. Il injecte bien avec la bonne portée. Le seul différent que je peux voir immédiatement est que configConstant a des propriétés lues dans un fichier de propriétés.

<bean id="userManager" class="com.mycompany.UserManager"> 
    <property name="userManagerDAO"> 
     <ref bean="userManagerDAOProxy" /> 
    </property> 

Des idées sur ce qui est le problème ou par où commencer à chercher?

Merci!

+0

Même erreur? Est-ce que votre faces-config.xml 'ok'? Lire https://stackoverflow.com/questions/18387993/spring-jsf-integration-how-to-inject-a-spring-component-service-in-jsf-managed – Kukeltje

Répondre

0

Je l'ai trouvé, mais je ne sais pas pourquoi. J'ai eu ceci:

<bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="viewClass"><value>org.springframework.web.servlet.view.JstlView</value></property> 
    <property name="prefix"><value>/jsp/</value></property> 
    <property name="suffix"><value>.jsp</value></property> 
    <property name="exposedContextBeanNames"> 
     <list> 
      <value>configConstant</value> 
     </list> 
    </property> 
</bean> 

Lorsque j'ai supprimé la partie exposéeContextBeanNames, il ne donnait plus l'erreur. Je sais que nous avons d'anciens fichiers jsp qui utilisent des variables de configConstant. Quelque chose dans l'exposition doit avoir changé la portée, quelqu'un sait pourquoi ou comment atteindre le même aiguillon? Et si vous utilisiez `# {configConstantBLABLABLA}`