2

私が持っているプロジェクトに特別な問題があります。プロジェクトで el-impl jar の 2 つのバージョンの両方を使用しています。v1.2 を使用して jsp を管理し、2.2 を使用して JSF ファイルを管理しています。jsp ファイルと jsf ファイルの両方が必要なため、2 つのバージョンを共存させるソリューションが必要です。

問題は、EL 2.2 関連を追加すると、 param-contextjsp ファイルが 2.2 バージョンで機能しないため、jsp が機能せず、この例外が発生することです。

com.sun.faces.config.ConfigurationException: It appears the JSP version of the container is older than 2.1 and unable to locate the EL RI expression factory, com.sun.el.ExpressionFactoryImpl.  If not using JSP or the EL RI, make sure the context initialization parameter, com.sun.faces.expressionFactory, is properly set.

そして、EL 2.2関連を削除すると param-context、web.xmlからこの部分を意味します:

 <context-param>
    <param-name>com.sun.faces.expressionFactory</param-name>
    <param-value>com.sun.el.ExpressionFactoryImpl</param-value>
  </context-param>

削除すると、el-impl2.2 はサポートされないため、JSF ファイルにアクセスすると、この例外が発生します (2.2 バージョンがサポートされていないため)。

    org.apache.el.parser.ParseException: Encountered " "(" "( "" at line 1, column 20.
    Was expecting one of:
        "}" ...
        "." ...
        "[" ...
        ">" ...
        "gt" ...
        "<" ...
        "lt" ...
        ">=" ...
        "ge" ...

    ...


Jul 25, 2012 5:39:24 PM com.sun.faces.lifecycle.ELResolverInitPhaseListener populateFacesELResolverForJsp
INFO: JSF1027: [null] The ELResolvers for JSF were not registered with the JSP container

2つのEL jarの両方を同じプロジェクトに使用して、プロジェクトをJSPおよびJSFファイルを含むものと競合できるようにするソリューションを誰かが手伝ってくれませんか? Mavenを使用しているので、ここに私の依存関係の一部があります:

<dependency>
      <groupId>org.glassfish.web</groupId>
      <artifactId>el-impl</artifactId>
      <version>2.2</version>
        <scope>provided</scope>
     </dependency> 

      <dependency>
<groupId>javax.el</groupId>
<artifactId>el-api</artifactId>
<version>2.2</version>
<scope>provided</scope>
</dependency> 
<dependency>
          <groupId>com.sun.faces</groupId>
          <artifactId>jsf-api</artifactId>
          <version>2.1.6</version>
        </dependency>
      <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

        <dependency>
          <groupId>com.sun.faces</groupId>
          <artifactId>jsf-impl</artifactId>
          <version>2.1.6</version>
        </dependency>

私の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">


        <filter>
                <filter-name>springSecurityFilterChain</filter-name>
                <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
        </filter>

        <filter-mapping>
                <filter-name>springSecurityFilterChain</filter-name>
                <url-pattern>/*</url-pattern>
        </filter-mapping>

        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>
            /WEB-INF/spring-security.xml
            /WEB-INF

    /applicationContext.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>

        <!--  to enable Spring MVC we need to add in this web.xml: -->
        <servlet>
            <servlet-name>spring</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <load-on-startup>2</load-on-startup>
        </servlet>

        <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>spring</servlet-name>
            <url-pattern>/me/*</url-pattern>
        </servlet-mapping>

        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>
            <listener>
            <listener-class>
                org.springframework.web.context.request.RequestContextListener
            </listener-class>
          </listener>

        <servlet-mapping>
            <servlet-name>Faces Servlet</servlet-name>
            <url-pattern>*.jsf</url-pattern>
          </servlet-mapping>
          <servlet-mapping>
            <servlet-name>Faces Servlet</servlet-name>
            <url-pattern>*.faces</url-pattern>
          </servlet-mapping>


        <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.xhtml</url-pattern>
     </servlet-mapping>
    </web-app>

顔-config.xml:

<?xml version="1.0" encoding="UTF-8"?>
<faces-config
    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_0.xsd"
    version="2.0">

    <!-- JSF and Spring are integrated -->

    <application>
        <el-resolver>
            org.springframework.web.jsf.el.SpringBeanFacesELResolver
        </el-resolver>
    </application>

</faces-config>

問題が発生する場合はタイルも使用しています。教えてください。これで私を助けてくれてありがとう

4

1 に答える 1

0

これは決して不可能です。

ただし、代わりに2つの別々のプロジェクトで実行できますが、プロジェクトに適切なEL jarを直接含め、サーブレットコンテナの事前にパッケージ化されたELjarをサーブレットコンテナのlibフォルダから削除します。これにより、少なくとも2つのアプリケーションを同じWebコンテナ、サーバー、DNS名、およびポート番号で実行できるようになります。

于 2012-07-25T11:12:22.777 に答える