2013-04-30 51 views
9

如果我有一个匿名内部类对象是这样的(其中,foo是一个接口):调用在EL与匿名内部类豆参数(一个或多个)方法

Foo foo = new Foo(){ 
    @Override 
    public String hello(Object dummyArg){ 
    return "hello, world."; 
    } 
}; 

和我尝试调用Foo.hello从JSP是这样的:

${foo.hello('blah')} 

它抛出:

javax.el.MethodNotFoundException: Unable to find method [hello] with [1] parameters 

,但如果没有参数:

Bar bar = new bar(){ 
    @Override 
    public String hello(){ 
    return "hello, world."; 
    } 
}; 

...

${bar.hello()} 

它工作正常。为什么?

这不是7121303的重复。我正在具体询问匿名内部类。使用常规类的实例,它可以处理任意数量的参数。

+0

我想我记得在老版本的Tomcat上被这种bu咬了。你的服务器是什么?确保你使用的是最新版本。 – 2013-05-10 14:27:54

+0

参考:http://stackoverflow.com/questions/1299837/cannot-refer-to-a-non-final-variable-inside-an-inner-class-defined-in-a-differen – 2013-05-14 02:04:50

回答

1

我不知道你正在使用哪个环境,但我尝试了tomcat7.0.40并且你的代码工作正常。

一种可能性是当预期对象时传递String时可能存在问题。可能是一些严格的解析。 您可以试试以下内容: 将参数存储到pageContext并使用它传递值以实现如下功能。

<% 
pageContext.setAttribute("argObj", "blah"); 
%> 

${foo.hello(argObj)}