Java实现搜索功能代码详解
程序员文章站
2024-02-16 23:05:40
首先,我们要清楚搜索框中根据关键字进行条件搜索发送的是get请求,并且是向当前页面发送get请求
//示例代码 请求路径为当前页面路径 "/product"...
首先,我们要清楚搜索框中根据关键字进行条件搜索发送的是get请求,并且是向当前页面发送get请求
//示例代码 请求路径为当前页面路径 "/product" <!-- 搜索框 get请求 根据商品名称的关键字进行搜索--> <form action="/product" class="form-inline pull-left" > <input type="text" name="productname" placeholder="商品名称" class="form-control" value="${param.productname}"> <button class="btn btn-primary"><i class="fa fa-search"></i></button> </form>
当我们要实现多条件搜索功能时,可以将搜索条件封装为一个map集合,再根据map集合进行搜索
controller层代码:
@getmapping("/product") public string list(@requestparam(required = false,defaultvalue = "1",name = "p")integer pageno, @requestparam(required = false,defaultvalue = "")string productname, @requestparam(required = false,defaultvalue = "")string place, @requestparam(required = false,defaultvalue = "")integer typeid, @requestparam(required = false,defaultvalue = "")bigdecimal minprice, @requestparam(required = false,defaultvalue = "")bigdecimal maxprice, model model) { map<string,object> searchparam = new hashmap<>(); searchparam.put("productname",productname); searchparam.put("place",place); searchparam.put("typeid",typeid); searchparam.put("minprice",minprice); searchparam.put("maxprice",maxprice); pageinfo<kaola> pageinfo = kaolaservice.findbypageno(pageno,searchparam); model.addattribute("pageinfo",pageinfo); return "product/list"; }
业务层代码:
public pageinfo<kaola> findbypageno(integer pageno, map<string, object> searchparam) { pagehelper.startpage(pageno,10); list<kaola> kaolalist = kaolamapper.findbysearchparamwithtype(searchparam); return new pageinfo<>(kaolalist); }
mybatis中的mapper.xml:
<select id="findbysearchparamwithtype" resulttype="com.kaishengit.entity.kaola"> select kaola.*, kaola_type.id as 'kaolatype.id', kaola_type.type_name as 'kaolatype.typename', parent_id as 'kaolatype.parentid' from kaola inner join kaola_type on kaola.type_id = kaola_type.id <where> <if test="productname != null and productname != ''"> kaola.product_name like concat('%',#{productname},'%') </if> <if test="place != null and place != ''"> and kaola.place = #{place} </if> <if test="typeid != null and typeid != ''"> and kaola.type_id = #{typeid} </if> <if test="minprice !=null and minprice != ''"> <![cdata[ and kaola.price >= #{minprice} ]]> </if> <if test="maxprice !=null and maxprice != ''"> <![cdata[ and kaola.price <= #{maxprice} ]]> </if> </where> order by kaola.id desc </select>
这样,就可以从前端到后端实现多条件搜索功能了。我们还会遇到这样一种情况,在输入搜索条件时,显示列表会不断自动刷新,这里其实用到了ajax的相关内容,在输入的过程中,会不断发出ajax请求,然后刷新页面。
<input type="text" name="productname" placeholder="商品名称" class="form-control" value="${param.productname}">
是从请求url的参数中获取值,实现在输入关键字搜索后刷新页面显示关键字这一功能,直接上图:
value="${param.productname}"
在输入中文关键字进行搜索时,可以使用encodeuricomponent解决url路径显示中文乱码问题:
//分页 $('#pagination-demo').twbspagination({ totalpages: ${pageinfo.pages}, visiblepages: 10, first:'首页', last:'末页', prev:'上一页', next:'下一页', href:"?productname="+encodeuricomponent('${param.productname}')+"&place="+encodeuricomponent('${param.place}') + "&typeid=${param.typeid}&minprice=${param.minprice}&maxprice=${param.maxprice}&p={{number}}" });
点击查看大图
搜索结果
总结
以上所述是小编给大家介绍的java实现搜索功能代码详解,希望对大家有所帮助