2013-04-30 5 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. Какой у вас сервер? Убедитесь, что вы используете последнюю версию. –

+0

ссылка: http://stackoverflow.com/questions/1299837/cannot-refer-to-a-non-final-variable-inside-an-inner-class-defined-in-a-differen –

ответ

1

Возможно, вам нужно создать функцию 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/)

+2

'С экземпляром обычный класс, он работает с любым количеством параметров ' –

1

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

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

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

${foo.hello(argObj)} 

 Смежные вопросы

  • Нет связанных вопросов^_^