【问题标题】:javax.el.ELException: Function "rich:element" not foundjavax.el.E​​LException:找不到函数“丰富:元素”
【发布时间】:2014-08-14 16:10:10
【问题描述】:

从 Kubuntu 迁移到 OS X(购买了 macbook)。使用以下设置环境来构建我的项目(从官方网站下载,而不是存储库):

  • Java SE(内部版本 1.7.0_60-b19)
  • Apache Maven 3.2.1
  • Apache Tomcat 7.054

项目技术栈:

  • Spring Framework 3.2.2.RELEASE
  • 休眠 4.2.5.Final
  • Java 服务器端 2.2.0
  • RichFaces 4.3.1.Final
  • MySQL 5.6.19

使用 maven 构建在 Windows 7、Kubuntu 14.04 和 Mac OS X Mavericks 10.9.3 上运行良好。部署到 Apache Tomcat 7 也正常(没有错误,出现警告)。部署项目后,进入登录屏幕,加载主页,浏览项目视图,直到我进入发票页面,其中包含 #{rich:element('some_id')}.some_action()。 呈现此页面时出现以下错误:

错误 com.skeds.core.component.exceptions.SkedsCustomExceptionHandler 函数“丰富:元素”未找到 javax.el.E​​LException:找不到函数“丰富:元素” 在 org.jboss.el.lang.ExpressionBuilder.visit(ExpressionBuilder.java:176) 在 org.jboss.el.parser.SimpleNode.accept(SimpleNode.java:129) 在 org.jboss.el.lang.ExpressionBuilder.prepare(ExpressionBuilder.java:138) 在 org.jboss.el.lang.ExpressionBuilder.build(ExpressionBuilder.java:152) 在 org.jboss.el.lang.ExpressionBuilder.createValueExpression(ExpressionBuilder.java:195) 在 org.jboss.el.E​​xpressionFactoryImpl.createValueExpression(ExpressionFactoryImpl.java:68) 在 com.sun.faces.facelets.el.E​​LText$ELTextVariable.apply(ELText.java:203) 在 com.sun.faces.facelets.el.E​​LText$ELTextComposite.apply(ELText.java:184) 在 com.sun.faces.facelets.compiler.TextInstruction.apply(TextInstruction.java:96) 在 com.sun.faces.facelets.compiler.UIInstructionHandler.apply(UIInstructionHandler.java:141) 在 javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:95) 在 javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:137)

我可以转到另一个页面,有时可以在没有此错误的情况下呈现发票页面,但仍然单击具有此 EL 的另一个页面会出现相同的错误。

尝试了什么:

  1. 部署在不同的 Tomcat 版本(7.054、7.050、7.053)上。
  2. 使用不同的 Maven 版本(3.2.1、2.0.4)构建。
  3. 使用的是不同的 Java SDK 版本(1.6、1.7、1.8)。
  4. 在代码调查期间发现org.richfaces.function.RichFunction 类的以下依赖项失败:

    import org.richfaces.cdk.annotations.Function;
    

    这是最可能的错误原因。在我的 pom.xml 中添加了以下依赖项:

    <dependency>
        <groupId>org.richfaces.cdk</groupId>
        <artifactId>annotations</artifactId>
        <version>4.3.1-SNAPSHOT</version>
        <scope>provided</scope>
    </dependency>
    

    IDE 预编译器显示依赖关系已解决。 mvn clean install 并且重新部署项目没有结果。出现同样的错误。

  5. 在谷歌搜索可能的解决方案时 - 在项目类路径中的某些包中看到el-api.jdk 的问题。在 tomcat7 lib 目录中有一个el-api.jdk,在pom.xml 有三个排除可能包含可能冲突的el-api.jdk 的依赖项。同样在target/WEB-INF/lib 目录中也没有可能发生冲突的el-api.jdk 文件。
  6. 在 Google Chrome 和 OS X Safari 中打开的项目 - 最后一个错误较少,但仍然存在。
  7. 从 Git 克隆项目 3 次,执行完整安装说明,从 IDE Intellij IDEA 13(最新更新)和终端构建并运行 - 将 .war 复制到 /webapps 并运行 catalina.sh。还尝试使用 mvn package -DskipTests jetty:run - 所有选项都给出相同的结果。

编辑:问题出现在 kubuntu 14.04 和 ubuntu 12.10 上。还在 Windows 7 上进行了测试——同样的问题。所以这不是基于操作系统的错误。

任何建议将不胜感激。

【问题讨论】:

    标签: jsf richfaces el


    【解决方案1】:

    已解决。像往常一样,问题的原因是完全愚蠢的。 Intellij IDEA 有一个选项可以自动清理 JSF .xhtml 视图上未使用的命名空间。 Invoices 页面包含一个包含 #{rich:element('some_id')} 的包含,但 Rich Function 不是实际的命名空间用法,例如标记名 &lt;rich:calendar&gt;。这就是为什么 Idea 在项目的一个重建中对其进行清理的原因。命名空间xmlns:rich="http://richfaces.org/rich" 仅在外部invoices.xhtml 中定义。并且在没有声明命名空间的情况下渲染内部包含会导致 RestoreView 阶段因给定错误而崩溃。

    【讨论】:

    • 是的,所以解决方案是添加 xmlns:rich="http://richfaces.org/rich" 回来!谢谢!
    • 该决议提到了特定的应用程序版本,所以我不得不提到该修复适用于 Apache Tomcat 8.0、JSF (Mojarra) 2.2.14 和 RichFaces 4.5.17.Final。
    猜你喜欢
    • 1970-01-01
    • 2012-03-13
    • 2016-05-29
    • 2011-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-29
    • 1970-01-01
    相关资源
    最近更新 更多