【发布时间】:2012-02-20 04:48:58
【问题描述】:
背景:
我在 Primefaces Web 应用程序(版本 2.2.1)中使用以下两个类(Search.java 和 SearchBean.java)。我在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...
}
}
在会话状态下维护数据的 Bean
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
}
以下替代方法也不起作用(仅使用一个 bean):
package com.actions;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
@Component
@Scope("session")
public class Search {
public void sessionIdleListener() {
}
}
【问题讨论】:
-
能否请您确认您遵守正确的 java bean 属性的 getter/setter 看看@link
-
@gbagga - 是的。我改变的只是 Primefaces 的版本。
-
你能从primefaces检查你当前使用的标签的差异吗?可能是标签的一个属性存在于版本2中但不存在于版本3中
-
问题是 Primefaces 标签的命名空间被改变了
标签: spring jsf jsf-2 primefaces