EL表达式或者JSTL中的${bean.property}

来源:互联网 发布:今日头条源码 编辑:程序博客网 时间:2024/06/17 12:40
public class TestBean{//注意该属性(property)的名字 private Double TrsCurryrPAY;@Column(name = "TRS_CURRYR_PAY") public Double getTrsCurryrPAY() {return TrsCurryrPAY;}public void setTrsCurryrPAY(Double trsCurryrPAY) {TrsCurryrPAY = trsCurryrPAY;}
test.jsp<!--下面的输出语句会出现error,无法找到'TrsCurryrPAY '--><c:out>${testBean.TrsCurryrPAY}</c:out>
这是为什么呢?因为EL表达式${bean.property},实际是通过该javaBean的getter方法获取。这个过程需要java的reflected机制,严格按照javaBean的属性命名规则去解析。比如上面的testBean.TrsCurryrPAY是先解析首字母为大写的TestBean的class文件,再按照getTer(),setTer()的规则,TestBean里的property应该是gettrsCurryrPAY()的写法。但是我们的却是首字母大写getTrsCurryrPAY()。
解决办法是1.直接改jsp页面 ${testBean.trsCurryrPAY} 
 2.规范的取名,重新写javabean,这是比较规范的做法,虽然是麻烦一下,但对于以后维护很好private Double trsCurryrPAY;@Column(name = "TRS_CURRYR_PAY")public Double getTrsCurryrPAY() {return trsCurryrPAY;}public void setTrsCurryrPAY(Double trsCurryrPAY) {this.trsCurryrPAY = trsCurryrPAY;}或者是private Double TRsCurryrPAY;public Double getTRsCurryrPAY() {return TRsCurryrPAY;}public void setTRsCurryrPAY(Double tRsCurryrPAY) {TRsCurryrPAY = tRsCurryrPAY;}
按照getTer,setTer方法的生成规则:abcdef----getAbcdef();Abcdef----getabcdef(); 不建议ABcdef---getABcdef();aBcdef---getABcadef();

为什么EL表达式里的属性名不是javabean的字段呢?


0 0