首先,我們要清楚搜索框中根據關鍵字進行條件搜索發送的是get請求,并且是向當前頁面發送get請求
1
2
3
4
5
6
|
//示例代碼 請求路徑為當前頁面路徑 "/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層代碼:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
@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" ; } |
業務層代碼:
1
2
3
4
5
|
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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
<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路徑顯示中文亂碼問題:
1
2
3
4
5
6
7
8
9
10
11
|
//分頁 $( '#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實現搜索功能代碼詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!
原文鏈接:http://www.jianshu.com/p/a1e3034e9e42?utm_source=tuicool&utm_medium=referral