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

Methods 访问对象属性的JSTL表达式语言,methods,jstl,el,getter,Methods,Jstl,El,Getter,今天我在学习一个让我挠头一个小时的教程。考虑: public class MyClass { public int getTotal() { amount = 100; return amount; } } 以及JSP的摘录: <p>Total: ${objectOfTypeMyClass.total}</p> //object instantiated elsewhere Total:${objectOfTypeMyC

今天我在学习一个让我挠头一个小时的教程。考虑:

public class MyClass {
    public int getTotal() {
        amount = 100;
        return amount;
    }
}
以及JSP的摘录:

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

//在别处实例化的对象
代码中没有一个名为“total”的实例变量被声明或使用过。在整个项目中(JSP中除外)对单词“total”的唯一引用是方法getTotal()

因此,经过一些绝望的最后尝试后,表达式语言的计算结果似乎是“调用someObject对象的getVar()方法”

我花了一个多星期的时间学习这个长教程,认为${someObject.var}是说“直接从someObject获取保存的实例变量”var

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

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

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

提供什么?

这应该可以:

public class MyClass {

    private int total = 100;

    public int getTotal() {
        return total;
    }

    ...
}

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

  • map.key
    从存储在
    key
    下的
    map
    中访问一个值。或
  • object.property
    使用“JavaBeans”约定从
    object
    访问
    property
    我的观察结果是否正确?为了使用EL引用任何实例变量,必须提供一个名为getVarname()的相应getter方法,其中“Varname”是实例变量的名称

    没错。EL遵守中所述的要求

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

    不,它当然不区分大小写。这是特定的行为<代码>${bean.Total}
  • 将无法工作

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

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

    总之,阅读这两个规范,一切都会变得清晰:)

    另见:

    你可能也想要一个SETER方法,所以总的不必一直是100。考虑注册你的帐户。您的应用程序现在已完全解耦。未注册的帐户只能通过使用相同的PC/webbrowser来访问/重用,只要Cookie没有被清除。我想我是在假设EL中使用的点运算符与Java中的点运算符相同(至少在访问对象变量时)的基础上,做出了一个a**。从功能上来说,我猜它是(即,将给您所需的属性),但从机械上来说,我可以看出它在引擎盖下是不同的(以JavaBean的方式获得)。谢谢你的回答