2013-04-30 35 views
9

Nếu tôi có một đối tượng lớp bên trong vô danh như thế này (nơi Foo là một giao diện):gọi các phương pháp với tham số (s) trên đậu lớp bên trong vô danh trong EL

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

và tôi cố gắng gọi Foo.hello từ jsp như thế này:

${foo.hello('blah')} 

nó ném:

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

nhưng nếu không có các thông số:

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

...

${bar.hello()} 

nó hoạt động tốt. Tại sao?

Đây không phải là bản sao của 7121303. Tôi hỏi cụ thể về các lớp bên trong vô danh. Với một thể hiện của một lớp thông thường, nó hoạt động với bất kỳ số tham số nào.

+0

Tôi nghĩ rằng tôi nhớ đã bị cắn bởi loại bu này trên phiên bản cũ của Tomcat. Máy chủ của bạn là gì? Đảm bảo bạn đang sử dụng phiên bản mới nhất. Tham chiếu –

+0

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

Trả lời

1

Có thể, bạn cần tạo hàm EL mặc dù bạn có thể chuyển tham số. (http://blog.idleworx.com/2010/04/custom-tags-and-custom-el-functions-in.html)

hỗ trợ cho các đối số phương thức truyền và gọi các phương thức non-getter đã được giới thiệu trong EL 2.2. Bật EL 2.2 trên tomcat (http://code2inspire.wordpress.com/2010/11/05/how-to-enable-el-2-2-on-tomcat-6/)

+2

'Với phiên bản một lớp thông thường, nó hoạt động với bất kỳ số tham số nào –

1

Tôi không biết bạn đang sử dụng môi trường nào nhưng tôi đã thử trên tomcat7.0.40 và mã của bạn hoạt động tốt.

Một khả năng là có thể có vấn đề khi truyền chuỗi khi Object được mong đợi. Có thể là một số phân tích cú pháp nghiêm ngặt. Bạn có thể thử theo dõi: Lưu đối số vào trangContext và sử dụng để chuyển giá trị cho hàm như sau.

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

${foo.hello(argObj)} 
Các vấn đề liên quan