我今天听了一个教程,让我头疼了一个小时。考虑:
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方法?
是什么给出了?
答案 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点运算符。它可以做一些不同的事情。包括:
map.key
访问了map
下存储的key
的值。或object.property
使用“JavaBeans”约定从property
访问object
。 答案 2 :(得分:0)
这应该有效:
public class MyClass {
private int total = 100;
public int getTotal() {
return total;
}
...
}