Java JSF2错误“;无法实例化ExpressionFactory“;应用程序引擎上

Java JSF2错误“;无法实例化ExpressionFactory“;应用程序引擎上,java,google-app-engine,netbeans,jsf-2,Java,Google App Engine,Netbeans,Jsf 2,使用在NetBeans 6.9.1中创建的新JSF 2.0应用程序,在生产服务器上启动时,此错误消息会出现在日志文件中: com.sun.faces.config.ConfigureListener contextInitialized:正在初始化 上下文“”的Mojarra 2.0.2(FCS b10) com.sun.faces.spi.InjectionProviderFactory createInstance:JSF1048: 施工后/施工前注释 目前ManagedBeans方法标记为

使用在NetBeans 6.9.1中创建的新JSF 2.0应用程序,在生产服务器上启动时,此错误消息会出现在日志文件中:

com.sun.faces.config.ConfigureListener contextInitialized:正在初始化 上下文“”的Mojarra 2.0.2(FCS b10)

com.sun.faces.spi.InjectionProviderFactory createInstance:JSF1048: 施工后/施工前注释 目前ManagedBeans方法标记为 有了这些注解,你会说 已处理注释

>com.sun.faces.config.ConfigureListener installExpressionFactory:无法删除 实例化ExpressionFactory “com.sun.el.ExpressionFactoryImpl”

无法启动上下文 com.google.apphosting.utils.jetty。RuntimeAppEngineWebAppContext@7616ad{/,/base/data/home/apps/scroogedemo/1.350894485313261302} com.sun.faces.config.ConfigurationException: 它显示的是 容器的版本早于2.1,无法使用 查找EL-RI表达式的步骤 工厂, com.sun.el.ExpressionFactoryImpl。如果 不要使用JSP或EL RI,请确保 上下文初始化参数, com.sun.faces.expressionFactory,是 设置正确。在 com.sun.faces.config.ConfigureListener.RegisterResolveRandListenerWithJSP(ConfigureListener.java:638)

该应用程序使用NetBeans提供的JSF2.0参考实现,其中似乎包括EL RI(包javax.faces.EL)

应用程序在开发服务器中运行良好。我在web.xml中使用这些配置条目:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 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">
    ...
    <context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>Production</param-value>
    </context-param>
    <context-param>
        <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
        <param-value>server</param-value>
    </context-param>
    <context-param>
        <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
        <param-value>.xhtml</param-value>
    </context-param>
    <context-param>
        <param-name>com.sun.faces.enableThreading</param-name>
        <param-value>false</param-value>
    </context-param>

...
javax.faces.PROJECT_阶段
生产
javax.faces.STATE_保存方法
服务器
javax.faces.DEFAULT_后缀
.xhtml
com.sun.faces.enableThreading
假的
我在页面上查看了有关此错误的信息,但此处未涉及此问题


更新:上面提到的页面说,项目中需要包含el api和el impl文件。它们不在NetBeans库列表中,因此未在服务器部署过程中上载。我猜它们是由本地开发服务器提供的,但在生产GAE中没有。这就是解决方案,见下文。

使用el-api-2.2.jar和el-impl-2.2.jar部署应用程序解决了问题。

使用el-api-2.2.jar和el-impl-2.2.jar部署应用程序解决了问题。

只需添加以下内容:

    public ServletContextInitializer servletContextInitializer() {
          .....

            sc.setInitParameter("com.sun.faces.expressionFactory", "org.apache.el.ExpressionFactoryImpl");
          .....
}
只需添加以下内容:

    public ServletContextInitializer servletContextInitializer() {
          .....

            sc.setInitParameter("com.sun.faces.expressionFactory", "org.apache.el.ExpressionFactoryImpl");
          .....
}

您的web.xml是否声明为符合Servlet 2.5?异常表明它被错误地设置为2.4,或者servletcontainer本身实际上是一个Servlet 2.4容器。@BalusC请看我的更新,它是2.5版,这似乎是GAE级别(根据)。您的web.xml是否声明符合Servlet 2.5?异常表明它被错误地设置为2.4,或者servletcontainer本身实际上是一个Servlet2.4容器。@BalusC请看我的更新,它是2.5版,这似乎是GAE级别(根据)。这在google应用程序引擎中真的需要吗?从什么版本开始?不,真的不。我认为使用Spring Boot Primefaces 7.0、JSF2 Mojarra 2.3.9、JSE 13、Spring Boot 2.2.5UI前端库并没有起到任何作用。首先,它应该初始化EL特性:您可以按照上面的描述进行初始化-在Spring Boot项目中w/o web.xml,或者在web.xm中初始化该特性,如果您的项目中有它的话。这是服务器初始化的一部分,而不是UI的一部分。啊哈,现在我们开始着手。。。。是的,spring引导需要这样的配置。这个问题不是关于SpringBoot的,而是关于GoogleAppEngine的。因此,这个答案与我认为的这个问题毫无关系。正如我所说,这里没有显著的区别:这是servlet的容器特性,而不是UI框架特性。如果您使用web.xml,只需插入com.sun.faces.expressionFactory com.sun.el.expressionfactorympl,那么google应用程序引擎中真的需要这个吗?从什么版本开始?不,真的不。我认为使用Spring Boot Primefaces 7.0、JSF2 Mojarra 2.3.9、JSE 13、Spring Boot 2.2.5UI前端库并没有起到任何作用。首先,它应该初始化EL特性:您可以按照上面的描述进行初始化-在Spring Boot项目中w/o web.xml,或者在web.xm中初始化该特性,如果您的项目中有它的话。这是服务器初始化的一部分,而不是UI的一部分。啊哈,现在我们开始着手。。。。是的,spring引导需要这样的配置。这个问题不是关于SpringBoot的,而是关于GoogleAppEngine的。因此,这个答案与我认为的这个问题毫无关系。正如我所说,这里没有显著的区别:这是servlet的容器特性,而不是UI框架特性。如果您使用web.xml,只需插入com.sun.faces.expressionFactory com.sun.el.ExpressionFactoryImpl即可