在第8節(jié)我們完成了查詢和刪除商品類別的功能,那么現(xiàn)在實(shí)現(xiàn)查詢和刪除商品的功能就很好做了,原理和第8節(jié)一模一樣,只是修改一些參數(shù),比如請求不同的action等。由于查詢和刪除商品不需要彈出新的UI窗口,所以我們只要完成完成query.jsp中相應(yīng)的部分以及相應(yīng)的后臺即可。
1. 查詢商品功能的實(shí)現(xiàn)
查詢功能主要在查詢框中實(shí)現(xiàn),從上一節(jié)可知,查詢框用的是一個(gè)text:"<input id='ss' name='serach' />",我們通過把普通的文本框轉(zhuǎn)化為查詢搜索文本框來實(shí)現(xiàn),下面我們在query.jsp中添加相應(yīng)部分的代碼:
1
2
3
4
5
6
7
8
9
10
11
12
|
$( '#ss' ).searchbox({ //觸發(fā)查詢事件 searcher: function (value,name){ //value表示輸入的值 //添加觸發(fā)代碼 $( '#dg' ).datagrid( 'load' ,{ //重新load,參數(shù)name指定為用戶輸入value name: value }); }, prompt: '請輸入搜索關(guān)鍵字' }); |
測試結(jié)果如下:
查詢很簡單,跟上一節(jié)load所有商品一樣,只不過查詢的時(shí)候參數(shù)設(shè)為用戶輸入的值,加載所有的時(shí)候參數(shù)設(shè)為空即可。
2. 刪除商品功能的實(shí)現(xiàn)
接下來做刪除商品功能,首先我們把query.jsp中相應(yīng)部分的代碼補(bǔ)全:
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
{ iconCls: 'icon-remove' , text: '刪除商品' , handler: function (){ //添加觸發(fā)代碼 var rows = $( "#dg" ).datagrid( "getSelections" ); //判斷是否有選中行記錄,使用getSelections獲取選中的所有行 //返回被選中的行,如果沒有任何行被選中,則返回空數(shù)組 if (rows.length == 0) { //彈出提示信息 $.messager.show({ //語法類似于java中的靜態(tài)方法,直接對象調(diào)用 title: '錯(cuò)誤提示' , msg: '至少要選擇一條記錄' , timeout:2000, showType: 'slide' , }); } else { //提示是否確認(rèn)刪除,如果確認(rèn)則執(zhí)行刪除的邏輯 $.messager.confirm( '刪除的確認(rèn)對話框' , '您確定要?jiǎng)h除此項(xiàng)嗎?' , function (r){ if (r){ //1. 從獲取的記錄中獲取相應(yīng)的的id,拼接id的值,然后發(fā)送后臺1,2,3,4 var ids = "" ; for ( var i = 0; i < rows.length; i ++) { ids += rows[i].id + "," ; } ids = ids.substr(0, ids.lastIndexOf( "," )); //2. 發(fā)送ajax請求 $.post( "product_deleteByIds.action" ,{ids:ids}, function (result){ if (result == "true" ) { //將剛剛選中的記錄刪除,要不然會(huì)影響后面更新的操作 $( "#dg" ).datagrid( "uncheckAll" ); //刷新當(dāng)前頁,查詢的時(shí)候我們用的是load,刷新第一頁,reload是刷新當(dāng)前頁 $( "#dg" ).datagrid( "reload" ); //不帶參數(shù)默認(rèn)為上面的queryParams } else { $.messager.show({ title: '刪除異常' , msg: '刪除失敗,請檢查操作' , timeout:2000, showType: 'slide' , }); } }, "text" ); } }); } } } |
從上面代碼中可以看出,刪除操作需要先選中至少一條記錄,選中后,當(dāng)確認(rèn)刪除時(shí)(即r為真),首先獲取用戶都勾選了哪些記錄,將這些記錄的id號拼接起來,然后想后臺發(fā)送ajax請求,請求productAction中的deleteByIds方法,將拼接好的id作為參數(shù)帶過去,如果刪除成功,則返回一個(gè)字符串"true"到前臺,然后前臺將剛剛勾選記錄清掉,以免影響后面更新操作,因?yàn)楦乱惨催x記錄,之后再刷新當(dāng)前頁,reload數(shù)據(jù)庫所有商品信息。
流程很清楚明了,下面我們寫后臺程序,先從service層開始:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
public interface ProductService extends BaseService<Product> { //查詢商品信息,級聯(lián)類別 public List<Product> queryJoinCategory(String type, int page, int size); //使用商品的名稱查詢 //根據(jù)關(guān)鍵字查詢總記錄數(shù) public Long getCount(String type); //根據(jù)ids刪除多條記錄 public void deleteByIds(String ids); } @SuppressWarnings ( "unchecked" ) @Service ( "productService" ) public class ProductServiceImpl extends BaseServiceImpl<Product> implements ProductService { //省略其他代碼…… @Override public void deleteByIds(String ids) { String hql = "delete from Product p where p.id in (" + ids + ")" ; getSession().createQuery(hql).executeUpdate(); } } |
接下來完成productAction中的deleteByIds方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
@Controller ( "productAction" ) @Scope ( "prototype" ) public class ProductAction extends BaseAction<Product> { //省略其他代碼…… public String deleteByIds() { System.out.println(ids); productService.deleteByIds(ids); //如果刪除成功就會(huì)往下執(zhí)行,我們將"true"以流的形式傳給前臺 inputStream = new ByteArrayInputStream( "true" .getBytes()); return "stream" ; } } |
和之前刪除商品類的思路相同,下面在struts.xml中配置:
1
2
3
4
5
6
|
<action name= "product_*" class = "productAction" method= "{1}" > <!-- 省略其他配置 --> <result name= "stream" type= "stream" > <param name= "inputName" >inputStream</param> </result> </action> |
這樣字符串"true"就通過流傳到前臺了,接收到說明刪除成功??匆幌滦Ч?/p>
測試成功,至此,商品的搜索和刪除功能做完了。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。
原文鏈接:http://blog.csdn.net/eson_15/article/details/51360804