2013-11-04 4 views
1

Eclipse> Liferay Project> Portlet> JSF 2.x> Primefaces를 사용하여 새 프로젝트를 만들었습니다. 그럼 나는이 demo에 따라 스프링 빈 관리를 추가하려고합니다.

문제는 생성 된 포틀릿이 tomcat 7에 배포 할 때 예외가 발생한다는 것입니다.Liferay 및 JSF2 + Spring 통합

Source Document: jndi:/localhost/jsf-test-portlet/WEB-INF/faces-config.xml Cause: Class 'org.springframework.web.jsf.el.SpringBeanFacesELResolver' is missing a runtime dependency: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/el/SpringBeanELResolver

프로젝트의 'lib'디렉토리를 살펴보면 jar 파일은 생성 된 WAR와 동일하게 위치합니다. 그래서 나는 그 문제가 어디에서 유래했는지 모른다.


내 ivy.xml

<?xml version="1.0"?> 
<ivy-module 
version="2.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd" 
> 
<info module="portlet_primefaces_tmpl" organisation="com.liferay" /> 

<dependencies defaultconf="default"> 
    <dependency name="el-api" org="javax.el" rev="2.2" /> 
    <dependency name="jboss-el" org="org.jboss.el" rev="2.0.1.GA" /> 
    <dependency name="jsf-api" org="com.sun.faces" rev="2.1.21" /> 
    <dependency name="jsf-impl" org="com.sun.faces" rev="2.1.21" /> 
    <dependency name="liferay-faces-bridge-api" org="com.liferay.faces" rev="3.1.3-ga4" /> 
    <dependency name="liferay-faces-bridge-impl" org="com.liferay.faces" rev="3.1.3-ga4" /> 
    <dependency name="liferay-faces-portal" org="com.liferay.faces" rev="3.1.3-ga4" /> 
    <dependency name="liferay-faces-util" org="com.liferay.faces" rev="3.1.3-ga4" /> 
    <dependency name="primefaces" org="org.primefaces" rev="3.5" /> 
    <dependency org="org.springframework" name="spring-core" rev="3.2.1.RELEASE"/> 
    <dependency org="org.springframework" name="spring-web" rev="3.2.1.RELEASE" /> 
</dependencies> 

내 web.xml의

<?xml version="1.0" encoding="UTF-8"?> 
<web-app 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-app_2_5.xsd" version="2.5"> 

<context-param> 
    <param-name>javax.faces.PROJECT_STAGE</param-name> 
    <param-value>Development</param-value> 
</context-param> 
<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/portlet-context.xml</param-value> 
</context-param> 
<context-param> 
    <param-name>com.sun.faces.expressionFactory</param-name> 
    <param-value>org.jboss.el.ExpressionFactoryImpl</param-value> 
</context-param> 
<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 
<listener> 
    <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class> 
</listener> 

<servlet> 
    <servlet-name>Faces Servlet</servlet-name> 
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>*.xhtml</url-pattern> 
</servlet-mapping> 

<!-- Prevent direct access to Facelet view XHTML by the userAgent (browser). --> 
<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>Facelet View XHTML</web-resource-name> 
     <url-pattern>*.xhtml</url-pattern> 
    </web-resource-collection> 
    <auth-constraint> 
     <role-name>nobody</role-name> 
    </auth-constraint> 
</security-constraint> 
<security-role> 
    <role-name>nobody</role-name> 
</security-role> 

내 얼굴-config.xml에

01 23,516,
<?xml version="1.0"?> 
<faces-config version="2.1" 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_1.xsd"> 

<lifecycle> 
    <phase-listener>com.liferay.faces.util.lifecycle.DebugPhaseListener</phase-listener> 
</lifecycle> 
<application> 
    <el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver> 
</application> 

+0

당신이 [jsf2 스프링 포틀릿]의 전쟁 (https://www.liferay.com/community/liferay-를 다운로드하는 경우 프로젝트/liferay-faces/demos # jsf2-spring-portlet) 데모를 $ LIFERAY_HOME/deploy 폴더에 배포하면 Tomcat 환경에서 작동합니까? –

+0

나는 당신이 제안한 것을했으며 그것은 WAR로 완벽하게 작동합니다 (저는 Job Application form을 볼 수 있습니다). 하지만 내 문제는 여전히 배포 시간에 (예외) 있습니다. – whyem

답변

0

데모에서 WAR 분석, 나는 다음 "깨끗한/배포"지금은 일하고, 내 ivy.xml 파일에 그 나머지 종속성을 추가, 그것은 7 봄 항아리가 있음을 을 깨달았다. 모든 JARS가 필요한 것은 아닐지 모르지만 다음 단계는 불필요한 JARS를 제거하는 것입니다.

ivy.xml 지금은 다음과 같습니다

<?xml version="1.0"?> 
<ivy-module 
version="2.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd" 
> 

<info module="portlet_primefaces_tmpl" organisation="com.liferay" /> 

<dependencies defaultconf="default"> 
    <dependency name="jboss-el" org="org.jboss.el" rev="2.0.1.GA" /> 
    <dependency name="jsf-api" org="com.sun.faces" rev="2.1.21" /> 
    <dependency name="jsf-impl" org="com.sun.faces" rev="2.1.21" /> 
    <dependency name="liferay-faces-bridge-api" org="com.liferay.faces" rev="3.1.3-ga4" /> 
    <dependency name="liferay-faces-bridge-impl" org="com.liferay.faces" rev="3.1.3-ga4" /> 
    <dependency name="liferay-faces-portal" org="com.liferay.faces" rev="3.1.3-ga4" /> 
    <dependency name="liferay-faces-util" org="com.liferay.faces" rev="3.1.3-ga4" /> 
    <dependency name="primefaces" org="org.primefaces" rev="3.5" /> 
    <!-- Spring dependencies --> 
    <dependency name="spring-core" org="org.springframework" rev="3.0.7.RELEASE"/> 
    <dependency name="spring-web" org="org.springframework" rev="3.0.7.RELEASE" /> 
    <dependency name="spring-context" org="org.springframework" rev="3.0.7.RELEASE" /> 
    <dependency name="spring-beans" org="org.springframework" rev="3.0.7.RELEASE" /> 
    <dependency name="spring-expression" org="org.springframework" rev="3.0.7.RELEASE" /> 
    <dependency name="spring-aop" org="org.springframework" rev="3.0.7.RELEASE" /> 
    <dependency name="spring-asm" org="org.springframework" rev="3.0.7.RELEASE" /> 
</dependencies> 

+0

다행스럽게도 :) jsf2-spring-portlet 데모는 종속성을 관리하기 위해 Maven을 사용합니다. [pom.xml] (https://github.com/liferay/liferay-faces/blob/3.1.x/demos/bridge/jsf2-spring-portlet/pom.xml#L41) 설명자는 스프링 웹을 다음과 같이 참조합니다. 의존성. 다른 모든 Spring 관련 JAR 의존성은 전이 적이므로 자동으로 포함됩니다. Ivy는 전 이적 의존성을 다운로드/포함 할 수 있으므로 별도로 나열해야하는 이유를 모르겠습니다. –

+0

전이 의존성에 대한 흥미로운 점. 질문에 설명 된 것과 같이 처음부터 프로젝트를 만들고 있습니다. 생성 된 JSF2.X 프로젝트에는 IVY가 포함되어 있습니다. Eclipse/IVY 방식과 같이 쉽게 설정하거나 "사용할 준비가 된"다른 옵션이 있습니까? 예를 들어 IVY가 아닌 Maven을 사용하여 포틀릿을 개발하고 싶습니다. – whyem

+1

새로운 [Liferay IDE 2.0 M2] (https://www.liferay.com/community/wiki/-wiki/1071674/Liferay+IDE+1.x+-+2.0+Upgrade+steps) 버전을 사용하면 Ant + Ivy 또는 Maven 프로젝트. 메이븐 (Maven)을 선택하면 자동적으로 어떤 [Liferay Faces Maven Archetype] (http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22com.liferay.maven.archetypes%22)을 사용할지를 알게됩니다 . –