今天解决了一个问题,就是,当你在下拉框中通过选中"全部",来查询所有数据。
怎么解决呢?
通常情况下,我们都是通过select下拉框中的一个值来查询某一条数据,比如
<select>
<option value ="1">Volvo</option> <option value ="2">Saab</option> <option value="3">Opel</option> <option value="4">Audi</option></select>
通过value里的值来按条件查询后台数据库。
那么,如果要你选择全部呢?你会怎么做?
<select>
<option value ="">全部</option> <option value ="1">Volvo</option> <option value ="2">Saab</option> <option value="3">Opel</option> <option value="4">Audi</option></select>
“全部”那一个option的value里面的值应该是什么呢?
其实很简单:
因为我用的是ssm,在mapper.xml中先写查询语句,前面的直接查询表里面的所有列,后面的where条件写 “where 1=1” 之后用<if test="id!=null">id=#{id} </if> 这么做是为了判断,如果有id则条件查询,如果没有id那就查询所有列。
这时候你该问了:那如果select的全部里显示不出来怎么办呢?
比如你之前是这样写的:
<option value ="">全部</option>
但是到了前台你点全部,但是select中显示不出来"全部" 那怎么办呢?
其实,你可以给<option value ="">Volvo</option>设置一个value值,但是这个值不能与你数据库表里的id相同。(方法二:推荐用字符串<option value ="全部">Volvo</option>,不会考虑BUG问题)也就是说数据库的id字段里不能有你设置的这个value值。否则它会只查询一条数据。之后你可能会有疑问了: 那这个value有值,传到mapper.xml中是有值的啊 咋办?
解决办法:如果你是使用ajax发送请求,那么,在得到这个“全部”中的value之后,把它在设置为" ",也就是空字符串
比如:
data.officeid = myscope.id;
if(data.officeid==1 ){
data.officeid='';
}
之后再发送ajax请求时,id就是一个空值了,到mapper.xml中的时候就不存在where条件查询了,那么查询到的值也是全部的。