使用JSF2,您应该能够做到这一点:
<h:commandButton action="#{myBean.myAction(myParameter)}"/>
然后调用action方法,传入参数(假设它是一个Integer):
@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: ...
现在,通过替换Tomcat lib目录中的el-api
jar,有了一个documented way of making this work using EL 2.2和Glassfish的实现,但是我仍然得到了同样的错误。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中的实现。我完全删除了Tomcat附带的现有el-api.jar
,是不是有一个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
发布于 2010-03-01 20:32:21
正如我在评论中提到的,这可以通过升级EL实现来解决(即用el-impl-2.2.jar替换jasper-el.jar )
发布于 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覆盖表达式工厂实现。
<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>
发布于 2011-04-04 20:36:34
用el-api.jar和el-impl-2.2.jar替换el-api.jar和el-impl.jar解决了这个问题。
<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>
https://stackoverflow.com/questions/2333605
复制相似问题