вызывать методы с параметрами на анонимных компонентах внутреннего класса в EL

Если у меня есть такой анонимный объект внутреннего класса (где 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. Я спрашиваю конкретно об анонимных внутренних классах. С экземпляром обычного класса он работает с любым количеством параметров.


person user316146    schedule 30.04.2013    source источник
comment
Кажется, я помню, как меня укусила такая шишка на старой версии Tomcat. Какой у тебя сервер? Убедитесь, что вы используете последнюю версию.   -  person JB Nizet    schedule 10.05.2013
comment
ссылка: заголовок stackoverflow.com/questions/1299837/   -  person Rong Nguyen    schedule 14.05.2013


Ответы (2)


Возможно, вам нужно создать функцию EL, через которую вы можете передать параметр. (http://blog.idleworx.com/2010/04/custom-tags-and-custom-el-functions-in.html)

поддержка передачи аргументов метода и вызова не-геттерных методов была введена в EL 2.2. Включите EL 2.2 на tomcat (http://code2inspire.wordpress.com/2010/11/05/how-to-enable-el-2-2-on-tomcat-6/)

person Sergej Raishin    schedule 14.05.2013

Я не знаю, какую среду вы используете, но я пробовал на tomcat7.0.40, и ваш код работает нормально.

Одна из возможностей заключается в том, что может возникнуть проблема с передачей String, когда ожидается Object. Может быть какой-то строгий разбор. Можете ли вы попробовать следующее: сохраните аргумент в pageContext и используйте его для передачи значения функции следующим образом.

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

${foo.hello(argObj)}
person Snehal Patel    schedule 16.05.2013