在EL中,如何在匿名内部类bean上调用带有参数的方法?

9
如果我有一个匿名内部类对象,如下所示(其中Foo是一个接口):
Foo foo = new Foo(){
  @Override
  public String hello(Object dummyArg){
    return "hello, world.";
  }
};

我尝试在 jsp 中调用 Foo.hello,代码如下:

${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的复制。我特别询问匿名内部类。对于一个普通类的实例,它可以用任意数量的参数工作。


我记得在旧版的Tomcat上曾经被这种错误所困扰。你用的是哪个服务器?确保你使用的是最新版本。 - JB Nizet
无法在定义于不同方法中的内部类中引用非最终变量。 - Rong Nguyen
2个回答

1

2
With an instance of a regular class, it works with any number of parameters - Rong Nguyen

1

我不知道你使用的是哪个环境,但我在tomcat7.0.40上尝试过,你的代码可以正常工作。

有可能是当期望Object时传递String出现了问题。可能是一些严格的解析。 你可以尝试以下操作: 将参数存储到pageContext中,并使用它将值传递给函数,如下所示。

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

${foo.hello(argObj)}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接