文章出處

  在第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:'請輸入搜索關鍵字'   
});

    測試結果如下:

 

        查詢很簡單,跟上一節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");  
                }  
            });  
        }                         
    }  
}

  從上面代碼中可以看出,刪除操作需要先選中至少一條記錄,選中后,當確認刪除時(即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();  
    }  
  
}  

 接下來完成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";  
    }  
} 

   和之前刪除商品類的思路相同,下面在struts.xml中配置:

<action name="product_*" class="productAction" method="{1}">  
            <!-- 省略其他配置 -->  
            <result name="stream" type="stream">  
                <param name="inputName">inputStream</param>  
            </result>  
        </action> 

  這樣字符串"true"就通過流傳到前臺了,接收到說明刪除成功。看一下效果:

 

        測試成功,至此,商品的搜索和刪除功能做完了。

  1. <action name="product_*" class="productAction" method="{1}">  
  2.             <!-- 省略其他配置 -->  
  3.             <result name="stream" type="stream">  
  4.                 <param name="inputName">inputStream</param>  
  5.             </result>  
  6.         </action> 

文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()