首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Tomcat 6.0.24中使用EL 2.2

在Tomcat 6.0.24中使用EL 2.2
EN

Stack Overflow用户
提问于 2010-02-25 19:31:28
回答 3查看 37K关注 0票数 17

使用JSF2,您应该能够做到这一点:

代码语言:javascript
复制
<h:commandButton action="#{myBean.myAction(myParameter)}"/>

然后调用action方法,传入参数(假设它是一个Integer):

代码语言:javascript
复制
@ManagedBean
@SessionScoped
public class MyBean {
    ...
    public String myAction(Integer myParameter) {
        // do something
        return null;
    }
    ...
}

这在Glassfish v3上非常有效。但是,不是在Tomcat上,您会得到一个ELException来通知解析错误

代码语言:javascript
复制
Caused by: javax.el.ELException: Error Parsing: ...

现在,通过替换Tomcat lib目录中的el-api jar,有了一个documented way of making this work using EL 2.2和Glassfish的实现,但是我仍然得到了同样的错误。Tomcat真的开始让我沮丧了!JSF2应该更简单!

Maven POM片段:

代码语言:javascript
复制
<repositories>
  <repository>
    <id>sun</id>
    <url>http://download.java.net/maven/2/</url>
  </repository>
  <repository>
    <id>jboss</id>
    <url>http://repository.jboss.com/maven2/</url>
  </repository>
</repositories>
...
  <dependency>
    <groupId>javax.el</groupId>
    <artifactId>el-api</artifactId>
    <version>2.2</version>
    <scope>provided</scope>
  </dependency>

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

更多信息。

下面是堆栈跟踪的一部分,它似乎仍在使用Apache EL实现,而不是我转储到lib中的实现。我完全删除了Tomcat附带的现有el-api.jar,是不是有一个el-impl.jar也要删除,它可能会覆盖某些东西?

代码语言:javascript
复制
Was expecting one of:
    "}" ...
    "." ...
    "[" ...
    ">" ...
    "gt" ...
    "<" ...
    "lt" ...
    ">=" ...
    "ge" ...
    "<=" ...
    "le" ...
    "==" ...
    "eq" ...
    "!=" ...
    "ne" ...
    "&&" ...
    "and" ...
    "||" ...
    "or" ...
    "*" ...
    "+" ...
    "-" ...
    "/" ...
    "div" ...
    "%" ...
    "mod" ...

    at org.apache.el.parser.ELParser.generateParseException(ELParser.java:2142)
    at org.apache.el.parser.ELParser.jj_consume_token(ELParser.java:2024)
    at org.apache.el.parser.ELParser.DeferredExpression(ELParser.java:113)
    at org.apache.el.parser.ELParser.CompositeExpression(ELParser.java:40)
    at org.apache.el.lang.ExpressionBuilder.createNodeInternal(ExpressionBuilder.java:93)
    ... 64 more
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-03-01 20:32:21

正如我在评论中提到的,这可以通过升级EL实现来解决(即用el-impl-2.2.jar替换jasper-el.jar )

票数 8
EN

Stack Overflow用户

发布于 2010-09-28 05:43:19

正如在其他答案中提到的,您需要将el-api-2.2.jar添加到Tomcat服务器的lib文件夹中,并将el-impl-2.2.jar添加到WEB-INF/lib文件夹中。

其他答案提到删除jasper或创建ExpressionFactoryImpl的自定义实现。这可能会起作用,但您不应该这样做。

您只需在MyFaces上使用org.apache.myfaces.EXPRESSION_FACTORY或在Mojarra上使用com.sun.faces.expressionFactory覆盖表达式工厂实现。

代码语言:javascript
复制
<context-param>
    <param-name>org.apache.myfaces.EXPRESSION_FACTORY</param-name>
    <param-value>com.sun.el.ExpressionFactoryImpl</param-value>
</context-param>
  <context-param>
    <param-name>com.sun.faces.expressionFactory</param-name>
    <param-value>com.sun.el.ExpressionFactoryImpl</param-value>
  </context-param>
票数 25
EN

Stack Overflow用户

发布于 2011-04-04 20:36:34

用el-api.jar和el-impl-2.2.jar替换el-api.jar和el-impl.jar解决了这个问题。

代码语言:javascript
复制
<context-param>
    <param-name>org.apache.myfaces.EXPRESSION_FACTORY</param-name>
    <param-value>com.sun.el.ExpressionFactoryImpl</param-value>
</context-param>
  <context-param>
    <param-name>com.sun.faces.expressionFactory</param-name>
    <param-value>com.sun.el.ExpressionFactoryImpl</param-value>
  </context-param>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2333605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档