Chr*_*isM 7 methods getter jstl el
今天我正在按照一个教程让我挠头一小时.考虑:
public class MyClass {
public int getTotal() {
amount = 100;
return amount;
}
}
Run Code Online (Sandbox Code Playgroud)
以及JSP的摘录:
<p>Total: ${objectOfTypeMyClass.total}</p> //object instantiated elsewhere
Run Code Online (Sandbox Code Playgroud)
代码中没有任何地方声明或使用过名为" total " 的实例变量.在整个项目中(除了JSP之外)对"total"一词的唯一引用是方法getTotal().
因此,在经历了一些绝望的最后一次尝试之后,表达式语言似乎将$ {someObject.var}计算为"调用someObject对象的getVar()方法" .
我使用这个长篇教程超过一个星期,认为$ {someObject.var}说"从someObject直接获取保存的实例变量" var " .
我是否一直都错了,我的观察是正确的,为了使用EL引用任何实例变量,你必须提供一个名为getVarname()的相应getter方法,其中" Varname "是实例变量的名称?
此外,EL在这方面似乎不区分大小写.在上面的示例中,$ {objectOfTypeMyClass.total}中的 "total" 全部为小写,其中方法getTotal()具有大写"T".
虽然我们在这里,为什么我们不需要实例化变量"total"?我猜EL实际上并没有引用实例变量......只是一个getter方法?
是什么赋予了?
我是否一直都错了,我的观察是正确的,为了使用EL引用任何实例变量,你必须提供一个名为getVarname()的相应getter方法,其中"Varname"是实例变量的名称?
那是对的.EL遵循EL 规范中描述的JavaBeans 规范.
此外,EL在这方面似乎不区分大小写.在上面的示例中,$ {objectOfTypeMyClass.total}中的"total"全部为小写,其中方法getTotal()具有大写"T".
不,它当然不是不区分大小写的.它是指定的行为.${bean.Total}不会有用.
虽然我们在这里,为什么我们不需要实例化变量"total"?我猜EL实际上并没有引用实例变量......只是一个getter方法?
这是因为它应该遵守Javabean规范.
总而言之,阅读这两个规格,一切都会很清楚:)