1. 程式人生 > >jsp批量刪除的實現

jsp批量刪除的實現

最近在做一個小型的專案,剛好遇到了這個批量刪除的操作,因為用的是ssh框架,所以感覺實現起來也不難,分享出來給大家看看,大家有什麼寶貴的意見可以回覆我。
在做這個功能之前,我覺得要好好想想怎麼去實現,因為分析問題其實挺重要的,有的時候,一個不簡單也不復雜的問題可能會花很多時間去做,這是因為自己事前沒有仔細想想這個思路。
下面,我就先來分析一下這個思路:

實現這個功能的基本思路如下:
1:在jsp頁面中獲取到要刪除物件的ID,一個或多個,批量當然是多個
2:在action中就要接收這些ID,並對這些ID進行初步的處理
3:在實現層進行資料庫的操作

步驟一:在jsp頁面中,用jquery獲取到物件的ID

<tr align="center" bgcolor="#FAFAF1" height="22">
    <th width="4%"><input name="selectall" type="checkbox" id="selectall" value="101" class="np">全選</th>
    <th width="6%">作業名稱</th>
    <th width="20%">作業簡介</th>
    <th width="10%">作業成績</th>
<th width="10%">作業上傳時間</th> <th width="10%">提交人</th> <th width="6%">操作</th> </tr> <s:iterator value="#session.allStaskpageResultSet.list" id="stask"> <!-- select stask.num, stask.name as staskName, stask.content, stask.grade, stask.uploadtime, student.name as studentName -->
<tr align='center' bgcolor="#FFFFFF" onMouseMove="javascript:this.bgColor='#FCFDEE';" onMouseOut="javascript:this.bgColor='#FFFFFF';" height="50" > <td><input name="atask" type="checkbox" id="ask" value="<s:property value="#stask[0]" />" class="np"></td> <td><s:property value="#stask[1]" /></td> <td><s:property value="#stask[2]" /></td> <td><s:property value="#stask[3]" /></td> <td><s:date name="#stask[4]" format="yyyy-MM-dd"/></td> <td><s:property value="#stask[5]" /></td> <td><a href="#" onclick="check()">刪除</a></td> </tr> </s:iterator>

這裡是用struts2標籤,對資料進行迭代的輸出

jquery全選的程式碼:

$("#selectall").click( 
        function(){ 
        if(this.checked){ 
        $("input[name='atask']").each(function(){this.checked=true;}); 
        }else{ 
        $("input[name='atask']").each(function(){this.checked=false;}); 
        } 
        } 
        );

});

jquery點選刪除按鈕時,對ID的獲取,並跳轉到action:

function check() {

        var msg = "您真的確定要刪除嗎?";   
        if (confirm(msg)==true){   
            var allcheckbox = "";
            var becheckbox = "";
            $("input[name=atask]").each(function(){ //遍歷table裡的全部checkbox
                allcheckbox += $(this).val() + ","; //獲取所有checkbox的值
                if($(this).attr("checked")) //如果被選中
                    becheckbox += $(this).val() + ","; //獲取被選中的值
            });

            if(becheckbox.length > 0) //如果獲取到
                becheckbox = becheckbox.substring(0, becheckbox.length - 1); //把最後一個逗號去掉
                window.location = "astask_batch_delete.action?checkTnum="+becheckbox;
        }else{   
        return false;   
        }   
}

然後就是在action中,對資料進行接收:

private String checkTnum;
    public String getCheckTnum() {
        return checkTnum;
    }

    public void setCheckTnum(String checkTnum) {
        this.checkTnum = checkTnum;
    }

批量刪除的方法:

public String batch_delete(){
        String [] checkedNums = checkTnum.split(",");
        adminService.batchDeleteStask(checkedNums);
        return "batch_delete";
    }

這是對接收到的ID進行處理,然後再呼叫Service層的批量刪除方法:

@Transactional
    public void batchDeleteAsk(String [] anums){
         String hql = "";
            for(int i=0;i<anums.length;i++) {
                if(i==0) {
                    hql = "anum="+anums[i];
                } else {
                    hql =hql + " or anum="+anums[i];
                }
            }   
           hql= "delete from Ask where "+hql;
        adminDao.batchDelete(hql,anums);
    }

這是進行hql查詢語句的拼湊,先判斷長度,當ID就只有一個的時候,就刪除一個,當多個時,就可以刪除多個,可以在後臺看hibernate輸出的查詢語句,是用or來連線各個ID的條件的

下面,在admin介面中定義了批量刪除的方法

//批量刪除留言
    public void batchDelete(final String hql,String[] anums);

下面是實現資料庫的語句

@Override
    public void batchDelete(String hql,String[] anums) {
        Session session=sessionFactory.getCurrentSession();
        Query query=session.createQuery(hql);
        query.executeUpdate();

    }

這裡,也可以用JDBC的本地語句來實現,到這裡,就已經基本完成這個功能了,粗略的思路就是這樣。