gpt4 book ai didi

jsf - 将 EL 2.2 与 Tomcat 6.0.24 一起使用

转载 作者:行者123 更新时间:2023-12-03 13:47:38 35 4
gpt4 key购买 nike

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

<h:commandButton action="#{myBean.myAction(myParameter)}"/>

然后它会调用 action 方法,传入参数(假设它是一个整数):
@ManagedBean
@SessionScoped
public class MyBean {
...
public String myAction(Integer myParameter) {
// do something
return null;
}
...
}

这在 Glassfish v3 上完美运行。但是不是在 Tomcat 上,您会收到一个 ELException 通知解析错误
Caused by: javax.el.ELException: Error Parsing: ...

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

Maven POM 片段:
<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 中的那个。我完全删除了现有的 el-api.jar Tomcat 自带的,有没有 el-impl.jar我也打算删除可能覆盖某些东西的地方?
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

最佳答案

如其他答案所述,您需要将 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 覆盖表达式工厂实现。

<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>

关于jsf - 将 EL 2.2 与 Tomcat 6.0.24 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2333605/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com