轉自:http://blog.csdn.net/eson_15/article/details/51360804
在第8節我們完成了查詢和刪除商品類別的功能,那麼現在實現查詢和刪除商品的功能就很好做了,原理和第8節一模一樣,只是修改一些參數,比如請求不同的action等。由於查詢和刪除商品不需要彈出新的UI窗口,所以我們只要完成完成query.jsp中相應的部分以及相應的後臺即可。
1. 查詢商品功能的實現
查詢功能主要在查詢框中實現,從上一節可知,查詢框用的是一個text:"<input id='ss' name='serach' />",我們通過把普通的文本框轉化爲查詢搜索文本框來實現,下面我們在query.jsp中添加相應部分的代碼:
- $('#ss').searchbox({
- //觸發查詢事件
- searcher:function(value,name){ //value表示輸入的值
- //添加觸發代碼
- $('#dg').datagrid('load',{//重新load,參數name指定爲用戶輸入value
- name: value
- });
- },
- prompt:'請輸入搜索關鍵字'
- });
$('#ss').searchbox({
//觸發查詢事件
searcher:function(value,name){ //value表示輸入的值
//添加觸發代碼
$('#dg').datagrid('load',{//重新load,參數name指定爲用戶輸入value
name: value
});
},
prompt:'請輸入搜索關鍵字'
});
測試結果如下:查詢很簡單,跟上一節load所有商品一樣,只不過查詢的時候參數設爲用戶輸入的值,加載所有的時候參數設爲空即可。
2. 刪除商品功能的實現
接下來做刪除商品功能,首先我們把query.jsp中相應部分的代碼補全:
- {
- iconCls: 'icon-remove',
- text:'刪除商品',
- handler: function(){
- //添加觸發代碼
- var rows = $("#dg").datagrid("getSelections");//判斷是否有選中行記錄,使用getSelections獲取選中的所有行
- //返回被選中的行,如果沒有任何行被選中,則返回空數組
- if(rows.length == 0) {
- //彈出提示信息
- $.messager.show({ //語法類似於java中的靜態方法,直接對象調用
- title:'錯誤提示',
- msg:'至少要選擇一條記錄',
- timeout:2000,
- showType:'slide',
- });
- } else {
- //提示是否確認刪除,如果確認則執行刪除的邏輯
- $.messager.confirm('刪除的確認對話框', '您確定要刪除此項嗎?', function(r){
- if (r){
- //1. 從獲取的記錄中獲取相應的的id,拼接id的值,然後發送後臺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. 發送ajax請求
- $.post("product_deleteByIds.action",{ids:ids},function(result){
- if(result == "true") {
- //將剛剛選中的記錄刪除,要不然會影響後面更新的操作
- $("#dg").datagrid("uncheckAll");
- //刷新當前頁,查詢的時候我們用的是load,刷新第一頁,reload是刷新當前頁
- $("#dg").datagrid("reload");//不帶參數默認爲上面的queryParams
- } else {
- $.messager.show({
- title:'刪除異常',
- msg:'刪除失敗,請檢查操作',
- timeout:2000,
- showType:'slide',
- });
- }
- },"text");
- }
- });
- }
- }
- }
{
iconCls: 'icon-remove',
text:'刪除商品',
handler: function(){
//添加觸發代碼
var rows = $("#dg").datagrid("getSelections");//判斷是否有選中行記錄,使用getSelections獲取選中的所有行
//返回被選中的行,如果沒有任何行被選中,則返回空數組
if(rows.length == 0) {
//彈出提示信息
$.messager.show({ //語法類似於java中的靜態方法,直接對象調用
title:'錯誤提示',
msg:'至少要選擇一條記錄',
timeout:2000,
showType:'slide',
});
} else {
//提示是否確認刪除,如果確認則執行刪除的邏輯
$.messager.confirm('刪除的確認對話框', '您確定要刪除此項嗎?', function(r){
if (r){
//1. 從獲取的記錄中獲取相應的的id,拼接id的值,然後發送後臺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. 發送ajax請求
$.post("product_deleteByIds.action",{ids:ids},function(result){
if(result == "true") {
//將剛剛選中的記錄刪除,要不然會影響後面更新的操作
$("#dg").datagrid("uncheckAll");
//刷新當前頁,查詢的時候我們用的是load,刷新第一頁,reload是刷新當前頁
$("#dg").datagrid("reload");//不帶參數默認爲上面的queryParams
} else {
$.messager.show({
title:'刪除異常',
msg:'刪除失敗,請檢查操作',
timeout:2000,
showType:'slide',
});
}
},"text");
}
});
}
}
}
從上面代碼中可以看出,刪除操作需要先選中至少一條記錄,選中後,當確認刪除時(即r爲真),首先獲取用戶都勾選了哪些記錄,將這些記錄的id號拼接起來,然後想後臺發送ajax請求,請求productAction中的deleteByIds方法,將拼接好的id作爲參數帶過去,如果刪除成功,則返回一個字符串"true"到前臺,然後前臺將剛剛勾選記錄清掉,以免影響後面更新操作,因爲更新也要勾選記錄,之後再刷新當前頁,reload數據庫所有商品信息。
流程很清楚明瞭,下面我們寫後臺程序,先從service層開始:
- public interface ProductService extends BaseService<Product> {
- //查詢商品信息,級聯類別
- public List<Product> queryJoinCategory(String type, int page, int size); //使用商品的名稱查詢
- //根據關鍵字查詢總記錄數
- public Long getCount(String type);
- //根據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();
- }
- }
public interface ProductService extends BaseService<Product> {
//查詢商品信息,級聯類別
public List<Product> queryJoinCategory(String type, int page, int size); //使用商品的名稱查詢
//根據關鍵字查詢總記錄數
public Long getCount(String type);
//根據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方法:
- @Controller("productAction")
- @Scope("prototype")
- public class ProductAction extends BaseAction<Product> {
- //省略其他代碼……
- public String deleteByIds() {
- System.out.println(ids);
- productService.deleteByIds(ids);
- //如果刪除成功就會往下執行,我們將"true"以流的形式傳給前臺
- inputStream = new ByteArrayInputStream("true".getBytes());
- return "stream";
- }
- }
@Controller("productAction")
@Scope("prototype")
public class ProductAction extends BaseAction<Product> {
//省略其他代碼……
public String deleteByIds() {
System.out.println(ids);
productService.deleteByIds(ids);
//如果刪除成功就會往下執行,我們將"true"以流的形式傳給前臺
inputStream = new ByteArrayInputStream("true".getBytes());
return "stream";
}
}
和之前刪除商品類的思路相同,下面在struts.xml中配置:
- <action name="product_*" class="productAction" method="{1}">
- <!-- 省略其他配置 -->
- <result name="stream" type="stream">
- <param name="inputName">inputStream</param>
- </result>
- </action>
<action name="product_*" class="productAction" method="{1}">
<!-- 省略其他配置 -->
<result name="stream" type="stream">
<param name="inputName">inputStream</param>
</result>
</action>
這樣字符串"true"就通過流傳到前臺了,接收到說明刪除成功。看一下效果:
測試成功,至此,商品的搜索和刪除功能做完了。
相關閱讀:http://blog.csdn.net/column/details/str2hiberspring.html
整個項目的源碼下載地址:http://blog.csdn.net/eson_15/article/details/51479994