最近在忙着做项目,突然遇到了好几个“坑”,这几个“坑”,花了我一天的时间,趁着今天有空,总结一下,希望大家引以为戒。
一号“坑”:需要通过struts2的后台action向前台jsp页面传递一个json数组对象,但传递到前台的值老是不对,下面贴出相关的代码和文件
action:
action中的get、set方法:
struts2映射文件:
这一切看起来都很正常,我自己鼓捣了两个小时没有搞定,请我同事帮忙。看起来好像没有问题,他也鼓捣了半天没有解决,项目里原来有写过struts2后台向前台传json数组对象,照着原来的代码,包括变量名都完全一样,结果就OK了。就是只把jArrayIndustryInfomations这个变量名改为ja就一切问题都解决了。当时以为是这个变量的名起的太长了,共有25个字符,可能是struts2的一个bug。因为最近项目比较紧,就没有深究。
今天礼拜天,准备把最近遇到的“坑”总结一下,我后来把变量名的长度从20、24、25、26、特别长的变量都能正常的向前台传递值。看来不是变量长度的问题,后来发现变量
jArrayIndustryInfomations和它的get、set方法有些诡异,这些get、set方法都是IDE自动生成的,可以见上面的截图,get方法是getjArrayIndustryInfomations set方法是
setjArrayIndustryInfomations 问题就出在了get、set方法上,IDE自动生成的方法,并不符合约定俗成的方法的格式,符合约定俗成格式get方法应该是getJArrayIndustryInfomations相应的set方法是setJArrayIndustryInfomations正是这样一个大小写字符之差,造成了struts2框架找不到了jArrayIndustryInfomations的get、set方法所以才导致了不能向前台正确的传值。后来我手动改了get、set方法也可以正确的传值。
我用的IDE是intellJ IDEA,我以为是IDE的bug,所以自动生成的get、set方法不对,后来我又在eclipse下试了,还是同样的结果,两款IDE都存在同样的问题,eclipse下的IDE生成的get、set方法也存在同样的问题。后来我试了几个不同的变量,如图:
发现了一个规律
IDE会把第一个字符是小写第二个字符是大写的变量,比如sTxxx这样的变量自动生成的get、set方法变成getsTxxx、setsTxxx,按照约定俗成的格式,应该是setSTxxx,setSTxxx。所以大家以后在起名的时候最好不要起变量名的第二个字符是大写的这种变量名,一般情况下你这么起也不会有问题,但是涉及到框架自动调用get、set方法的情况下就出问题了,而且出了问题,还很不好定位出错的原因,get、set方法是IDE自动生成的,谁也不会想到,IDE自动生成的get、set方法会有误。
二号“坑”:后台要向前台传递一个json数组,后台代码如下:
前台代码如下:
后台传递一个json对象数组,一个对象里有有两个键值对而,其中一对儿的键就是"key",另一对儿的键是"value",结果到了前台怎么也取不出来。由于"key"和“value”都是关键字,大家可以看到在前台jsp页面上的key和value都是特殊颜色标出的。
后来换了"wbjNo"和"wbjName"这样两个键,一切就OK了
后台代码:
前台代码:
大家在保存键名儿的时候要注意,避免用“key”、“value”这些关键字,一旦使用了,出现了错误,挺难定位问题的。
三号“坑”:javascript中是有数据类型的,刚开始要取出json数组对象中的值,后台向前台传递过来的的确是个json字符串,通过alert和console.log都能看出来,数据是没问题,结果在前台就是取不出来。后来发现需要转换类型,要把json字符串转换为json数组,可以通过eval()函数把json字符串转换为json数组。这样就能正确的取出值了。