JSF 2.2中如何向EL值表达式传递参数?
JSF 2.2中EL表达式正确调用带参数方法的解决办法
你碰到的解析错误,本质是旧版EL(2.1及以下)的行为导致的——旧EL不支持直接调用带参数的方法,只会把表达式里的名称当作属性去匹配对应的getter方法,才会出现getId('foo')被解析成MyBean.getId('foo')()、getGetId('foo')()这类错误。
要正确调用带参数的方法,需按以下步骤操作:
1. 确保Servlet版本启用EL 2.2特性
JSF 2.2依赖Servlet 3.0及以上版本(EL 2.2是Servlet 3.0的核心特性),所以必须在web.xml中声明正确的版本:
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <!-- 其他配置 --> </web-app>
如果你的web.xml版本低于3.0,即使JSF是2.2,EL也会沿用旧版逻辑,无法支持带参数的方法调用。
2. 使用正确的EL调用语法
确认Servlet版本符合要求后,直接用方法的完整名称调用即可:
#{myBean.getId('foo')}
此时EL解析器会直接匹配MyBean中定义的getId(String name)方法,不会再错误地去寻找getGetId()这类不存在的getter。
额外排查点
- 容器版本支持:比如Tomcat 7及以上才支持Servlet 3.0,若使用Tomcat 6或更低版本,即使web.xml配置正确也无法启用EL 2.2特性。
- JSF实现版本:确保使用的Mojarra或MyFaces是标准的JSF 2.2版本,避免因版本兼容问题导致EL特性失效。
内容的提问来源于stack exchange,提问作者eastwater
相关产品推荐
相关产品推荐

