属性命名不遵守javaBean规范导致版本升级后获取不到值

如下所示:
  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等软件版本的不断提高, 低版本的出现的问题可能在高版本中解决了, 低版本原来正常的代码可能在高版本环境下不再支持。


碰到的坑好大,一直排查是框架升级后导致的值注入不进来。在此总结下经验教训。

猜你喜欢

转载自xu-nuo.iteye.com/blog/2367057
今日推荐