javax.el.PropertyNotFoundException问题排查:已定义getter/setter仍提示version属性不存在
javax.el.PropertyNotFoundException: Property [version] not found的常见问题 这种情况我之前也踩过不少坑,明明getter/setter都写了却报这个错,大概率是一些容易被忽略的细节问题,给你列几个排查方向:
严格检查JavaBean命名规范:虽然你写了
getVersion()和setVersion(),但要确认有没有拼写错误——比如是不是把方法名写成了getversion()(小写v),或者属性名和方法名不匹配?JavaBean规范要求属性version对应的getter必须是getVersion()(boolean类型才是isXXX),哪怕一个字母大小写错了都会导致EL找不到属性。确认模型类已正确编译部署:很多时候你修改了代码,但IDE没重新编译,或者部署的还是旧的class文件。试试执行项目的clean编译操作,比如Maven项目跑
mvn clean install,或者在IDE里点「Build -> Clean Project」,然后重新部署应用。检查控制器绑定的模型对象:有没有可能在控制器里把错误的类实例放到了model里?比如你以为绑定的是
com.something.something.models.something,但实际传的是另一个没有version属性的类?仔细看一下控制器代码,比如model.addAttribute("formObj", new WrongClass());这种低级错误很容易犯。确保模型类是public访问级别:如果你的模型类是包私有(没有加
public修饰符),即使有getter/setter,EL表达式也无法访问它的属性。一定要把类声明写成public class Something { ... }。重启应用服务器:部分服务器(比如Tomcat)会缓存EL表达式的解析结果,哪怕你修改了类并重新编译,不重启服务器的话缓存还在。试试完全关闭服务器再重新启动,不要依赖热部署。
排查类的重复或导入错误:检查一下有没有在其他包下存在同名的
something类,或者在控制器里导入错了类,导致实例化的是另一个没有version属性的类?这种情况在项目规模大的时候很容易出现。
内容的提问来源于stack exchange,提问作者aquile hollins

