Java Can';t使用EL解析对象

Java Can';t使用EL解析对象,java,jsp,el,Java,Jsp,El,在我的HttpServlet类的doGet(..)方法中,我正在这样做 public class Foo extends Properties { public String getVal(){ return "2"; } } 那么在.jsp中就是这个代码 Foo foo = new Foo(); request.setAttribute("key", foo); 有人能告诉我为什么${key.val}不起作用吗 [Edit]我只对foo类中的一个属性感兴趣

在我的HttpServlet类的doGet(..)方法中,我正在这样做

public class Foo extends Properties {
    public String getVal(){
         return "2";
    }
}
那么在.jsp中就是这个代码

Foo foo = new Foo();
request.setAttribute("key", foo);
有人能告诉我为什么${key.val}不起作用吗

[Edit]我只对foo类中的一个属性感兴趣,因为似乎无法使用EL访问getVar()调用(对吗?),jsut put是可行的替代方法吗

1  {}
2  
3  {}
4  2

Foo是Properties类的子类的一个子类,因此我无法轻松地将它们解耦。

也许您禁用了EL?检查这两个答案,了解可能的原因和解决方案:

另一种可能性是,您将
绑定到其他上下文中不同的内容。此代码:

request.setAttribute("key_val", foo.getVal());
相当于:

${key}


而不是
。它首先在pageContext中搜索,然后是请求、会话和应用程序上下文。

您的
Foo
类有一个
toString()
方法,它像
{}
一样打印,
val
可能调用了错误的getter。在getter调用中添加一些调试行/断点。如果无效,请发布更多关于
Foo
类的详细信息。

您确定提供了真正的代码吗?因为,很抱歉,它应该是%@Andrew:你能在你的示例代码和输出中添加一些额外的文本吗?这样我们就可以清楚地看到什么代码生成了什么输出?还要确保向我们显示原始输出(即来自视图源),而不是被浏览器弄乱。您的Foo类是否实现了java.util.Map?如果是这样,${key.val}可以调用Foo.get(“val”)而不是Foo.getVal()。它扩展了java.util.Properties,但是getVal()方法是由我实现的。那么从请求对象获取Foo的正确语法是什么呢?如果您只想从请求范围使用对象,则需要使用
${request.key}
${request['key']}
。但通常,
${key}
是您想要的。我只是写了一个可能的答案。当我使用它们时,${request.key}和${request['key']}都不返回任何内容。当你说${key}是我想要的,你的意思是我的语法应该是正确的吗?@安德鲁:是的,你的语法看起来不错。很抱歉,它应该是${requestScope.key}或${requestScope[“key”]}。这确实可以解释这种行为。如果Foo实现Map,${key.val}也可以转换为Foo.get(“val”)。或者,JavaBeans info可能会为“val”属性定义不同的方法,尽管我在实践中从未见过这种情况。我重写了toString()方法,并在getter中添加了一个断点,toString()方法确实是生成“{}”的方法,但是getVal方法仅用于第4行的调用。它是
public
方法吗?实际上,我们需要更多关于
Foo
类的详细信息。
Properties
反过来实现
Map
。在EL中,其
get()
方法优于此方法。这就是为什么你会看到这种行为。我建议让
Foo
编写而不是继承它。
${key}
<%= page.findAttribute("key") %>