记录开发中遇到的两个坑

坑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"字符串,如下图


BO.png

这时候很容易出现一个坑,当其他方法从数据库里查出height值时,查到的是"null"字符串,如果不仔细辨别很容易以为是null。当我把这个值赋到页面上时,<c:if test="${not empty person.height}">条件明明不成立,但<c:if></c:if>之间的元素却始终会显示出来,断点看到查到的person.height确实是"null",eclipse查看器又不显示引号,看到的就是null,还以为是EL表达式出错,耗费了很多时间去查找原因。

记录一下,以后在开发时要避免这些问题。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。