javax.el.PropertyNotFoundException: 类型[com.ytz.entity.Book]上找不到属性[author]
我在使用el表达式取值时出现了上述错误,如下是涉及到错误的代码:
前端:(部分)
<c:forEach items="${currBooks}" var="book"><tr><td><a href="">${book.bname}</a></td><td>${book.author}</td></tr></c:forEach>
实体类:(部分)
public class Book {private String bname;private String author;public String getBname() {return bname;}public void setBname(String bname) {this.bname = bname;}public String getAuther() {return author;}public void setAuther(String author) {this.author = author;}}
出现问题时,我仔细查看了属性名,确认一致无误,而后发现author的getter()和setter()两个函数名是getAuther(),抱着试一试的心态,将两个函数修改了,如下:
public String getAuthor() {return author;}public void setAuthor(String author) {this.author = author;}
项目就可以跑了。
而后我查看了el表达式识别对象属性的原理:
以表达式${book.author}为例
EL表达式会去book类里寻找这个author的get方法,此时会自动把author首字母大写并加上get前缀,一旦找到与之匹配的方法,EL表达式就会认为这就是要访问的属性,并返回属性的值。
所以,想要通过EL表达式获取对象属性的值,那么这个属性就必须有与之对应的get方法。
由此,若出现如上错误,最好先查看对应类中的getter()函数,确保其格式是“get+属性名首字母大写”