9

如果我有一个像这样的匿名内部类对象(其中 Foo 是一个接口):

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的副本。我专门询问匿名内部类。对于常规类的实例,它可以使用任意数量的参数。

4

2 回答 2

1

我不知道您使用的是哪个环境,但我在 tomcat7.0.40 上尝试过,您的代码运行良好。

一种可能性是在预期 Object 时传递 String 可能存在问题。可能是一些严格的解析。您可以尝试以下操作:将参数存储到 pageContext 并使用该参数将值传递给函数,如下所示。

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

${foo.hello(argObj)}
于 2013-05-16T11:00:55.497 回答
1

可能,您需要创建可以传递参数的 EL 函数。( http://blog.idleworx.com/2010/04/custom-tags-and-custom-el-functions-in.html )

EL 2.2 中引入了对传递方法参数和调用非 getter 方法的支持。在 tomcat 上启用 EL 2.2 ( http://code2inspire.wordpress.com/2010/11/05/how-to-enable-el-2-2-on-tomcat-6/ )

于 2013-05-14T01:56:29.413 回答