jsf通过EL调用任意方法

时间:2010-12-29 08:30:07

标签: java jsf jsf-2 el

我是JSF的首发,并且无法通过EL调用任意方法 根据我阅读的Java EE 6中包含的统一表达式语言2.1版,支持调用任意方法并将参数传递给它们。
我正在使用MyFaces2.0.3,JRE6Up21,Tomcat 6.0.29和Eclipse 我在facelet中有以下代码段:

<h:form>
<p>
<h:link outcome="NextPage" value="Link for Next Page">
<f:param name="word1" value="hello" />
<f:param name="word2" value="world" />
</h:link>
</p>
</h:form>

并在faceface NextPage.xhtml

<h:form>
<p>
This is the method invocation #{model.printArgs(param.word1,param.word2)}
</p>
</h:form>  

Model是一个托管bean(请求作用域),它具有此方法printArgs,返回word1和word2的字符串连接。

@ManagedBean
@SessionScoped
public class Model {

public String printArgs(String word1, String word2) {
        String result = "No arguments??????";

        if (null != word1 && !word1.isEmpty() && null != word2 && !word2.isEmpty()) {
            result = word1+" "+word2;
        }
        return result;

    }

}

当我按下链接时,网址为http://localhost:8080/RegJSF/faces/NextPage.xhtml?word1=hello&word2=world
但我收到了错误

  

org.apache.el.parser.ParseException:   遇到“”(“”(“”在第1行,   第25栏。期待其中一个:“}”   ......“。” ......“[”...“&gt;” ......“gt”......   “&LT;” ...“lt”...“&gt; =”......“ge”......   “&lt; =”......等等。

如果我删除#{model.printArgs(param.word1,param.word2)}加载了NextPage,那么问题就是方法调用 这里有什么问题?是配置问题吗?
注意如果我使用Mojarra2.0.3,则同样的问题 有人可以帮忙吗?

谢谢!

2 个答案:

答案 0 :(得分:3)

  

根据我阅读的Java EE 6中包含的统一表达式语言2.1版,支持调用任意方法并将参数传递给它们。

我认为你错了。这种支持是在JSP 2.2中引入的(这是满足JEE6规范所必需的)。

来自JSP 2.2 spec

  

维护1和维护版本2之间的更改

     

此版本的主要变化是   添加方法调用   EL中的参数,如   #{trader.buy(“JAVA”)}

由于Tomcat 6是JSP 2.1容器,因此您可以考虑升级到Tomcat 7。

答案 1 :(得分:0)

This is the method invocation <h:outputText value="#{model.printArgs(param.word1,param.word2)}"/>

这里需要双引号。另外,请尝试使用outputText。