javax.el.E​​LException:找不到函数“rich:element”

时间:2014-06-24 11:51:42

标签: jsf richfaces el

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

  • Java SE(build 1.7.0_60-b19)
  • Apache Maven 3.2.1
  • Apache Tomcat 7.054

项目技术堆栈:

  • Spring Framework 3.2.2.RELEASE
  • Hibernate 4.2.5.Final
  • Java Server Faces 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()。 呈现此页面的错误如下:

    ERROR com.skeds.core.component.exceptions.SkedsCustomExceptionHandler Function 'rich:element' not found
    javax.el.ELException: Function 'rich:element' not found
    at org.jboss.el.lang.ExpressionBuilder.visit(ExpressionBuilder.java:176)
    at org.jboss.el.parser.SimpleNode.accept(SimpleNode.java:129)
    at org.jboss.el.lang.ExpressionBuilder.prepare(ExpressionBuilder.java:138)
    at org.jboss.el.lang.ExpressionBuilder.build(ExpressionBuilder.java:152)
    at org.jboss.el.lang.ExpressionBuilder.createValueExpression(ExpressionBuilder.java:195)
    at org.jboss.el.ExpressionFactoryImpl.createValueExpression(ExpressionFactoryImpl.java:68)
    at com.sun.faces.facelets.el.ELText$ELTextVariable.apply(ELText.java:203)
    at com.sun.faces.facelets.el.ELText$ELTextComposite.apply(ELText.java:184)
    at com.sun.faces.facelets.compiler.TextInstruction.apply(TextInstruction.java:96)
    at com.sun.faces.facelets.compiler.UIInstructionHandler.apply(UIInstructionHandler.java:141)
    at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:95)
    at 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. 在谷歌浏览器和OS X Safari中打开项目 - 最后一个提供的错误更少,但它们仍然存在。
  7. 从Git克隆项目三次,执行完整安装说明,从IDE Intellij IDEA 13(最新更新)和终端复制.war到/ webapps并运行catalina.sh。还尝试使用mvn package -DskipTests jetty:run - 所有选项都会产生相同的结果。
  8. 编辑:问题出现在kubuntu 14.04和ubuntu 12.10上。也在Windows 7上测试过 - 同样的问题。所以这不是基于操作系统的错误。

    任何建议都将受到青睐。

1 个答案:

答案 0 :(得分:3)

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