struts2 Action中存在如下定义的iName属性,strust2由2.3.15.x升级到最新版本,eclipse使用4.4.2,后台iName属性获取不到前台传过来的值,为空。
public class XxxxAction { private int iName; private int age; public int getIName() { return iName; } public void setIName(int iName) { this.iName = iName; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
经查阅资料可知:
1. 对于常规属性 <propertyName> , 属性名称的第一个单词小写且之后的小写字母的个数大于1,第二个单词首字母大写 。对应的getter/setter方法名为:get /set + <PropertyName>(), 即属性名称的第一个单词的首字母改成大写, 前面再加上"get"或"set"前缀。
如:userName getUserName() setUserName()
2. 对于布尔类型 <propertyName> , 可以按常规属性的规则编写getter/setter方法外, getter方法可以使用 is + <PropertyName>()的形式来代替。
3. 对于非常规属性<pName>, 属性名称的第一个单词小写且字母个数等于1,第二个单词首字母大写 。
老的Eclipse版本(不知道哪个版本开始的) 对应的getter/setter方法名可以为:get/set + <PName>(), 即第一个单词的首字母为改为大写,前面再加上"get"或"set"前缀
总结:
1. javaBean属性命名规范按照javaBean规范进行命名
2. 属性名第一个单词尽量避免使用一个字母:如eBook, eMail。
3. 随着jdk, eclipse, struts2,spring等软件版本的不断提高, 低版本的出现的问题可能在高版本中解决了, 低版本原来正常的代码可能在高版本环境下不再支持。
碰到的坑好大,一直排查是框架升级后导致的值注入不进来。在此总结下经验教训。