坑1:jsp的EL表达式空格问题导致c:if标签之间的元素不显示
<c:if test="${not empty person.height} ">
这个表达式当条件成立时却不会显示c:if标签之间的元素,原因是右边的}和"之间有空格,正确写法应该是:
<c:if test="${not empty person.height}">
坑2:当实体类的属性没有set值,直接insert到数据库中保存的是"null"字符串,操作数据库为Oracle
具体例子
//实体类
public class Person{
private String name;
private int age;
private String height;
private String weight;
/*省略get、set*/
}
//Controller
XxService XxService =new XxService();
@RequestMapping(value = "/index")
public void index(HttpServletRequest request){
Person person = new Person();
person.setName(request.getParameter("name"););
person.setAge(Integer.parseInt(request.getParameter("age")));
if(StringUtil.isNotEmpty(request.getParameter("height"))){//当height不空时,给它赋其他值
String height = "180";
person.setHeight(height);
}
person.setWeight(request.getParameter("weight"));//request.getParameter("weight")的值为""
xxService.insertPerson(person);//将Person属性插入到数据库中
}
//insert语句为
String sql = "insert into t_person(name,age,height,weight)values('"+person.getName()+ "',"+person.getAge+",'"+person.getHeight()+"','"+person.getWeight()+"')";
//执行后的sql为
insert into t_person(name,age,height,weight)values('测试082702',2,'null','')
当上面的request.getParameter("height")值为空时,if条件不成立,height并没有set值,此时进行insert操作,数据库中存入的height是"null"字符串,如下图
这时候很容易出现一个坑,当其他方法从数据库里查出height值时,查到的是"null"字符串,如果不仔细辨别很容易以为是null。当我把这个值赋到页面上时,<c:if test="${not empty person.height}">条件明明不成立,但<c:if></c:if>之间的元素却始终会显示出来,断点看到查到的person.height确实是"null",eclipse查看器又不显示引号,看到的就是null,还以为是EL表达式出错,耗费了很多时间去查找原因。