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

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的字段呢?


猜你喜欢

转载自blog.csdn.net/QueenJade/article/details/19038831