2012-01-27 33 views
1

背景:Primefaces 2.2.1至3.0.1升级问题与映射/定位Spring管理豆

我在一家Primefaces Web应用程序使用下面的两个类(Search.java和SearchBean.java) (版本2.2.1)。 com.actions包中的所有类都是请求范围的bean,它们处理我应用程序中的业务逻辑(actionListeners,Listeners等)。 com.beans包中的类都是会话范围的bean,它们维护关于应用程序的状态。每个请求作用域都有一个使用CDI注入的会话作用域bean的实例,每个都由Spring管理。

问题:

当我升级到3.0.1类没有得到通过Primefaces注册,我得到这样物业“测试”的类型com.actions.Search未发现的错误消息。这发生在每个从Primefaces组件映射到下面的请求或会话bean的单个方法上。有什么适当的改变的想法?

例外:

javax.el.ELException: /WEB-INF/facelet/components/test.xhtml: Property 'process' not found on type com.actions.Search 
com.sun.faces.facelets.compiler.AttributeInstruction.write(AttributeInstruction.java:94) 
    com.sun.faces.facelets.compiler.UIInstructions.encodeBegin(UIInstructions.java:82) 
    com.sun.faces.facelets.compiler.UILeaf.encodeAll(UILeaf.java:183) 
    javax.faces.render.Renderer.encodeChildren(Renderer.java:168) 
    javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:853) 
    javax.faces.component.UIComponent.encodeAll(UIComponent.java:1652) 
    javax.faces.component.UIComponent.encodeAll(UIComponent.java:1655) 
    javax.faces.component.UIComponent.encodeAll(UIComponent.java:1655) 
    javax.faces.component.UIComponent.encodeAll(UIComponent.java:1655) 
    com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:399) 
    com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131) 
    com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121) 
    com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
    com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) 
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:313) 
    org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:79) 
    org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:115) 
    org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237) 
    org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167) 
    com.dc.api.service.impl.CacheControlFilter.doFilter(CacheControlFilter.java:31) 
    com.dc.api.service.impl.HttpsCookieFilter.doFilter(HttpsCookieFilter.java:46) 

类来处理业务逻辑,并拥有一个会话实例范围的bean

package com.actions; 

import javax.inject.Inject; 
import javax.inject.Named; 
import org.springframework.context.annotation.Scope; 
import com.beans.SearchBean; 

@Named 
@Scope("request") 
public class Search{ 
    @Inject 
    private SearchBean searchBean; 

    public void process() { 
     //business logic here 
     searchBean.get... 
    } 
} 

豆在会话状态保持数据

package com.beans; 

import javax.inject.Named; 
import org.springframework.context.annotation.Scope; 

@Named 
@Scope("session") 
public class SearchBean { 
    private String text="test"; 
    //getters and setters 
} 

下面的替代方法也是n OT工作(只用一个豆):

package com.actions; 

import org.springframework.context.annotation.Scope; 
import org.springframework.stereotype.Component; 

@Component 
@Scope("session") 
public class Search { 

    public void sessionIdleListener() { 
    } 
} 
+0

可否请您确认您是否遵守适当的getter/setter for java bean属性看看@ [link]( http://gackoverflow.com/questions/8577545/javax-el-propertynotfoundexception-property-answer-not-found-on-type-com-pool) – 2012-01-27 06:00:17

+0

@gbagga - 是的,它的确如此。我改变的只是Primefaces的版本。 – c12 2012-01-27 07:07:58

+0

您可以检查您从primefaces当前使用的标记的差异,可能是标记的属性存在于版本2中,但不是版本3 – 2012-01-27 07:41:42

回答

2

这个问题是通过提供新的Primefaces 3.0.1命名空间的xmlns的解决:P =“http://primefaces.org/ui”,因为它已经从改变前版本的xmlns:p =“http://primefaces.prime.com.tr/ui”