困惑了两个多小时的问题,最后发现罪魁祸首竟然是一个[b]大小写[/b]问题:
Items类:
private int mId;public int getMId() { return mId;}public void setMId(int mId) { this.mId = mId;}
action类:
public Items items;public Items getItems() { return items;}public void setItems(Items items) { this.items = items;}
[b]注意:此处get方法最好写上,否则可能会出现丢值的问题。[/b]
页面用EL表达式取值:
${items.mId }
控制台错误信息:
严重: Servlet.service() for servlet jsp threw exceptionjavax.el.PropertyNotFoundException: Property 'mId' not found on type org.zjkh.homepage.dao.pojo.Items at javax.el.BeanELResolver$BeanProperties.get(BeanELResolver.java:193) at javax.el.BeanELResolver$BeanProperties.access$400(BeanELResolver.java:170) at javax.el.BeanELResolver.property(BeanELResolver.java:279) at javax.el.BeanELResolver.getValue(BeanELResolver.java:60) at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:53)
网上也有不少网友出现了类似问题,不过说法各种各样。我也尝试了,都失败了。
我的解决办法:
将“mId”改成“mid”,当然get、set方法也要记得改哦,好了,问题就这样解决了!
实在想不通,记得以前这样是可以的,难道JavaBean的规范要求更严格了,不允许开头有俩大写字母?就在我解决这个问题的同时,同事也出现了类似问题,注入DAO时spring配置文件编译时老是提示错误:“not property set method ...”,也折腾了好半天,所有可能的隐患都检查了,都没成功。最终把他的DAO类名改了一下“MMxxxDAO”改成“MxxxDAO”就好了,看来还是跟他的命名规范有关,有时间得好好研究一下它。