Spring &引用;无法从jsf-impl-2.0.jar中读取TLD META-INF/jsf_core.TLD;集成JSF时出错
我们有一个Struts+Spring+Hibernate应用程序,我们正在尝试集成JSF。为此,我们在Spring &引用;无法从jsf-impl-2.0.jar中读取TLD META-INF/jsf_core.TLD;集成JSF时出错,spring,jsf,struts,asf,Spring,Jsf,Struts,Asf,我们有一个Struts+Spring+Hibernate应用程序,我们正在尝试集成JSF。为此,我们在web.xml和struts config.xml中进行了一些配置。我加了一些 JAR文件到WEB-INF/lib 我的WEB-INF/lib中包含的jar文件如下所示: antlr-2.7.6rc1.jar,asm.jar,asm attrs.jar,bsh-2.0b2.jar,c3p0-0.9.1.2-jdk1.3.jar,cglib-2.1.3.jar,commons-beanutils-
web.xml
和struts config.xml
中进行了一些配置。我加了一些
JAR文件到WEB-INF/lib
我的WEB-INF/lib中包含的jar文件如下所示:
antlr-2.7.6rc1.jar,asm.jar,asm attrs.jar,bsh-2.0b2.jar,c3p0-0.9.1.2-jdk1.3.jar,cglib-2.1.3.jar,commons-beanutils-1.7.jar,commons-betwixt-0.8.jar,commons-cli-1.0.jar,commons-codec-1.3.jar,commons-collections-3.jar,commons-dbcp-1.2.1.1.7.jar,commons-digester-1.7.jar,commons-0.0.jar,commons-tp-1.jar-1.jar,commons-1.jar,commons-1.1.3.jar-1.jar-1,commons-io-1.3.1.jar,commons-lang-2.3.jar,commons-logging-1.1.jar,commons-pool-1.2.jar,commons-validator.jar,connector-1_5.jar,dom4j-1.6.1.jar,ehcache-1.1.jar,el-api-6.0.20.jar,el-impl-2.0-SNAPSHOT.jar,hibernate-3.1.3.3.jar,jetty-util-6.0.0.0.0.0.0.jar,servlet-api-2.3.jar,spring,spring-2.6.6.jar,struts-2.jar,xmlParserAPIs-2.6.2.jar,xstream-1.3.1
下面的jar文件是为集成JSF而新增的:
jsf-api-2.0.jar、jsf-impl-2.0.jar、myfaces-jsf-api-1.0.9.jar.jar.jar、struts-faces-1.3.10.jar
我的web.xml
是:
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>SSHIntgr</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:/config/applicationContext.xml</param-value>
</context-param>
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>
org.apache.struts.action.ActionServlet
</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/config/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>3</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>3</param-value>
</init-param>
<init-param>
<param-name>locale</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<!-- struts-faces configuration start -->
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- struts-faces configuration start -->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<session-config>
<session-timeout>30</session-timeout>
</session-config>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
我使用的是SpringSourceToll套件、Tomcat5.5和JDK1.5。
我的tomcat5.5\common\lib
包含JAR文件
commons el.jar、jasper compiler.jar、jasper compiler jdt.jar、jasper runtime.jar、jsp api.jar、naming factory.jar、naming-factory-dbcp.jar、,
命名资源.jar,servlet-api.jar
我的服务器启动正常,但无法加载JSP页面,我得到的异常如下
org.apache.jasper.JasperException: Unable to read TLD "META-INF/jsf_core.tld" from JAR file "file:/SSHIntgr/WEB-INF/lib/jsf-impl-2.0.jar": org.apache.jasper.JasperException: Failed to load or instantiate TagLibraryValidator class: com.sun.faces.taglib.jsf_core.CoreValidator
at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:50)
at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407)
at org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:179)
at org.apache.jasper.compiler.TagLibraryInfoImpl.<init>(TagLibraryInfoImpl.java:181)
at org.apache.jasper.compiler.Parser.parseTaglibDirective(Parser.java:418)
at org.apache.jasper.compiler.Parser.parseDirective(Parser.java:483)
org.apache.jasper.JasperException:无法从JAR文件:/SSHIntgr/WEB-INF/lib/jsf-impl-2.0.JAR:org.apache.jasper.JasperException:加载或实例化TagLibraryValidator类失败:com.sun.faces.taglib.jsf_core.core验证程序
位于org.apache.jasper.compiler.DefaultErrorHandler.jsperor(DefaultErrorHandler.java:50)
位于org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407)
位于org.apache.jasper.compiler.ErrorDispatcher.jsperor(ErrorDispatcher.java:179)
位于org.apache.jasper.compiler.TagLibraryInfoImpl.(TagLibraryInfoImpl.java:181)
位于org.apache.jasper.compiler.Parser.parseTaglibDirective(Parser.java:418)
位于org.apache.jasper.compiler.Parser.parseDirective(Parser.java:483)
如何解决这个问题?您使用的是Tomcat5.5,它是一个Servlet2.4容器,但JSF2.0需要Servlet2.5或更高版本 因此,您有两种选择:
- 将servletcontainer升级为Servlet2.5可比较的servletcontainer(例如Tomcat6.0)
- 将JSF降级到与Servlet2.4兼容的1.2
与具体问题无关:文件
servlet-api-2.3.jar
不属于WEB-INF/lib
。摆脱它。它应该已经由servletcontainer提供(在本例中,是Tomcat的/lib
中的容器)。保留此文件只会导致在运行时丢失类def或抽象方法错误
org.apache.jasper.JasperException: Unable to read TLD "META-INF/jsf_core.tld" from JAR file "file:/SSHIntgr/WEB-INF/lib/jsf-impl-2.0.jar": org.apache.jasper.JasperException: Failed to load or instantiate TagLibraryValidator class: com.sun.faces.taglib.jsf_core.CoreValidator
at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:50)
at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407)
at org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:179)
at org.apache.jasper.compiler.TagLibraryInfoImpl.<init>(TagLibraryInfoImpl.java:181)
at org.apache.jasper.compiler.Parser.parseTaglibDirective(Parser.java:418)
at org.apache.jasper.compiler.Parser.parseDirective(Parser.java:483)