【问题标题】:java.lang.NoSuchMethodError: javax.el.ELContext.notifyBeforeEvaluation(Ljava/lang/String;)Vjava.lang.NoSuchMethodError: javax.el.E​​LContext.notifyBeforeEvaluation(Ljava/lang/String;)V
【发布时间】:2013-11-15 19:27:24
【问题描述】:

我正在尝试让 JSF 2.2 在 GAE 1.8.7 上运行。我正在关注本教程:http://java.wildstartech.com/Java-Platform-Enterprise-Edition/JavaServer-Faces/javaserver-faces-22/configuring-jsf-22-to-run-on-the-google-app-engine-using-eclipse

当我在本地运行它时,index.jsf 页面呈现良好。

但是,当我将它部署到 GAE 时,虽然普通 servlet 运行良好,但 index.jsf 在 GAE 日志中显示 HTTP 505 错误并显示以下内容:

2013-11-15 11:23:42.578 /index.jsf 500 533ms 0kb Mozilla/5.0 (Windows NT 6.3; WOW64)   AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36 module=default version=1 W
2013-11-15 11:23:42.573 /index.jsf java.lang.NoSuchMethodError: javax.el.ELContext.notifyBeforeEvaluation(Ljava/lang/String;)V 
    at com.sun.el.lang.EvaluationContext.notifyBef
2013-11-15 11:23:42.577 Uncaught exception from servlet java.lang.NoSuchMethodError: javax.el.ELContext.notifyBeforeEvaluation(Ljava/lang/String;)V 
    at com.sun.el.lang.Evalua

我正在使用来自 maven 存储库的 javax-faces.2.2.0.jarjavax-el.3.0.0.jar

【问题讨论】:

    标签: google-app-engine jsf el jsf-2.2


    【解决方案1】:

    如果您真的不需要 EL 3.x 功能,那么我建议您迁移到 2.x 版本,然后在您的 web.xml 文件中将其指定为上下文参数:

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

    上述声明将确保您使用的是随代码一起提供的 EL 版本,而不是 GAE/J 容器提供的版本。

    不要忘记在您的库中包含 EL 实现 jar。

    p.s.:如果有任何帮助,我在 GitHub 上有一个 starter template 可以帮助您入门。

    【讨论】:

    • 对了,GAE使用的EL是什么版本的?这与我的代码不兼容。
    • 查看 GAE/J SDK 中的共享库。除了 Servlet 和 JSP jar,您还会看到 EL jar 文件。如果我没记错的话,这是 Apache EL 实现。
    猜你喜欢
    • 1970-01-01
    • 2013-09-07
    • 1970-01-01
    • 2016-02-09
    • 2018-11-26
    • 2016-02-07
    • 2020-03-28
    • 1970-01-01
    • 2019-09-20
    相关资源
    最近更新 更多