JSTL表达式语言访问对象属性

时间:2010-09-22 18:23:19

标签: methods jstl el getter

我今天听了一个教程,让我头疼了一个小时。考虑:

public class MyClass {
    public int getTotal() {
        amount = 100;
        return amount;
    }
}

以及JSP的摘录:

<p>Total: ${objectOfTypeMyClass.total}</p> //object instantiated elsewhere

代码中没有任何地方声明或使用名为“ total ”的实例变量。整个项目中唯一对“total”一词的引用(除了在JSP中)是方法 getTotal()

因此,经过一些绝望的最后一次试验后,表达式语言似乎将 $ {someObject.var} 评估为“调用的getVar()方法> someObject 对象。

我使用这个长篇教程超过一周,认为 $ {someObject.var} 说“从 var “ > someObject 。

我一直都错了,我的观察是正确的,为了使用EL引用任何实例变量,你必须提供一个名为 getVarname()的相应getter方法,其中“ Varname “是实例变量的名称?

此外,EL在这方面似乎不区分大小写。在上面的示例中, $ {objectOfTypeMyClass.total} 中的“total”全部为小写,方法 getTotal()的大写字母为“T”。

虽然我们在这里,为什么我们不需要实例化变量“total”?我猜EL实际上并没有引用实例变量......只是一个getter方法?

是什么给出了?

3 个答案:

答案 0 :(得分:8)

  

我一直都错了,我的观察是正确的,为了使用EL引用任何实例变量,你必须提供一个名为getVarname()的相应getter方法,其中“Varname”是实例变量的名称?

这是对的。 EL遵守JavaBeans specification

中所述的EL specification
  

此外,EL在这方面似乎不区分大小写。在上面的示例中,$ {objectOfTypeMyClass.total}中的“total”全部为小写,其中方法getTotal()的大写字母为“T”。

不,它当然不是不区分大小写的。它是指定的行为。 ${bean.Total}不起作用。

  

虽然我们在这里,为什么我们不需要实例化变量“total”?我猜EL实际上并没有引用实例变量......只是一个getter方法?

这是因为它应该遵守Javabean规范。

总而言之,请阅读这两个规范,一切都将清楚:)

另见:

答案 1 :(得分:2)

.中的objectOfTypeMyClass.total是JSTL EL点运算符。它可以做一些不同的事情。包括:

  1. map.key访问了map下存储的key的值。或
  2. object.property使用“JavaBeans”约定从property访问object

答案 2 :(得分:0)

这应该有效:

public class MyClass {

    private int total = 100;

    public int getTotal() {
        return total;
    }

    ...
}