【问题标题】:Primefaces 2.2.1 to 3.0.1 Upgrade Issue with Mapping/Locating Spring Managed BeansPrimefaces 2.2.1 到 3.0.1 升级问题与映射/定位 Spring Managed Beans
【发布时间】: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


【解决方案1】:

通过提供新的 Primefaces 3.0.1 命名空间 xmlns:p="http://primefaces.org/ui" 解决了该问题,因为它已从以前版本的 xmlns:p="http:// primefaces.prime.com.tr/ui"

【讨论】:

    猜你喜欢
    • 2020-11-01
    • 2012-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-16
    • 2019-09-21
    • 2011-09-05
    • 1970-01-01
    相关资源
    最近更新 更多