当我们后台在做表单数据回填时,经常有遇到一些莫名其妙的错误,导致自己无法找到bug所在,我在这聊聊我所遇到的一些坑!
Character类型数据在el表达式中无法进行判断
在将Character类型的性别属性值放在input标签中进行判断,是无法进行判断的,因为el表达式在进行比较时是没有字符类型的。演示就比如我出现问题的下面这段jsp代码:
<td>联系人性别:<td>
<input type="radio" value="1" name="lkm_gender" ${linkMan.lkm_gender == '1'? 'checked':'' }>男
<input type="radio" value="2" name="lkm_gender" ${linkMan.lkm_gender_s == '2'? 'checked':'' }>女
</td>
我的LinkMan实体的gender属性是Character类型,在从域中拿到LinkMan对象,取出来的linkMan.lkm_gender是是Character类型,而el表达式中'1'或'2'却是字符串类型的,所以在回显时一直没有效果,这个问题困扰我半个小时,经过很多调试过程,请求参数中的数据明明是对的,但怎么就是不能返回到页面,于是我试着将'1'和'2'的ASCII码值填入进去之后结果才正常显示出来,('1'-->49,'2'--->50),这样子写代码是不是很low啊。不过我有更进步的方法,在这分享给大家!
el表达式取值是通过set方法进行取值的,根据前面的错误经验,已经知道了问题的所在之处,为了避免去查ASCII码值的这种情况,我在实体类中写了一个set方法专门用来获取字符串型的性别,大家请看代码:
public Character getLkm_gender() {
return lkm_gender;
}
**public String getLkm_gender_s() {
if(lkm_gender!=null){
switch (lkm_gender) {
case '1':
return "男";
case '2':
return "女";
default:
return "";
}
}else
return "";
}**
第一个getLkm_gender()方法是原始属性的set方法,是用来获取字符型的gender值。
第二个getLkm_gender_s()方法是新添加的用来获取字符串型的gender值,这个方法放在el表达式中才能得到真正的应用,请看更新后的jsp代码段:
<td>联系人性别:<td>
<input type="radio" value="1" name="lkm_gender" ${linkMan.lkm_gender == '男'? 'checked':'' }>男
<input type="radio" value="2" name="lkm_gender" ${linkMan.lkm_gender_s == '女'? 'checked':'' }>女
</td>
经过测试,代码可以正常运行,希望看到这篇文章的开发人员可以节省解决bug的时间。谢谢观看!