【ssm個人博客項目實戰06】博客類別的添加修改刪除的實現

在前面兩篇博客中我們分別實現了在dao層的博客類別的增刪改查已經分頁,以及在後臺管理系統界面中的博客類別的分頁顯示,那麼現在我就要準備實現了在後臺管理界面的博客類別的添加,修改,刪除操作了。
#1、博客類別service層完善
在service層中 需要注入dao層的對象 然後調用相應的方法即可
ssm.blog.service.BlogTypeService

“`java
/**
* Created by xp on 2017/4/14.
* @author xp
* @Description 博客類別service接口
*/
public interface BlogTypeService {

//省略其他代碼…

// 添加博客類別
public Integer addBlogType(BlogType blogType);

// 更新博客類別
public Integer updateBlogType(BlogType blogType);

// 刪除博客類別
public Integer deleteBlogType(Integer id);

}

然後就是完善service對應的實現類
ssm.blog.service.impl.BlogTypeImpl
```java
/**
 * Created by xp on 2017/4/14.
 * @author xp
 * @Description 博客類別service接口實現類
 */
@Service
public class BlogTypeServiceImpl implements BlogTypeService{

    @Resource
    private BlogTypeDao blogTypeDao;

//省略其他代碼...

    public Long getTotal() {
        return blogTypeDao.getTotal();
    }

    public Integer addBlogType(BlogType blogType) {
        return blogTypeDao.addBlogType(blogType);
    }

    public Integer updateBlogType(BlogType blogType) {
        return blogTypeDao.updateBlogType(blogType);
    }

    public Integer deleteBlogType(Integer id) {
        return blogTypeDao.deleteBlogType(id);
    }
}





<div class="se-preview-section-delimiter"></div>

這樣我們的service就解決了 接下來就是完善我們的controller層
2、博客類別controller層完善
在控制層我們需要提供新增、修改、刪除三個url請求接口給前臺的頁面請求,但是其實我們可以把修改跟新增放在一個方法中,只需要判斷傳來的數據是否有沒有id
有:就是修改 沒有:就是新增
對於刪除操作來說,我們的是可以多選的,那麼我們需要前臺把選中的id按照某種特定的方式拼接成字符串 ,然後我們在控制層把字符串按照某種方式分割,然後for循環逐個刪除 刪除的時候我們要判斷該博客類別下面是否有博客 如果有就禁止刪除博客類別 ,等我們完成博客對應的操作再來完善 在那裏我們註釋寫一個TODO就可以
例如

前臺:
  選中要刪除的id分別是 var idArray = [3, 5 ,6]
  按,拼接拼接成字符var ids = idArray.join(",")
  請求發送給後臺
後臺
  String[]  idArr = ids.split(",");
 這樣我們就拿到了全部要刪除的id了




<div class="se-preview-section-delimiter"></div>

就是代碼實現

 // 添加和更新博客類別
    @RequestMapping("/save")
    public String save(BlogType blogType, HttpServletResponse response)
            throws Exception {

        int resultTotal = 0; // 接收返回結果記錄數
        if (blogType.getId() == null) { // 說明是第一次插入
            resultTotal = blogTypeService.addBlogType(blogType);
        } else { // 有id表示修改
            resultTotal = blogTypeService.updateBlogType(blogType);
        }

        JSONObject result = new JSONObject();
        if (resultTotal > 0) {
            result.put("success", true);
        } else {
            result.put("success", false);
        }
        ResponseUtil.write(response, result);
        return null;
    }

    // 博客類別信息刪除
    @RequestMapping(value = "/delete"}  )
    public String deleteBlog(
            @RequestParam(value = "ids", required = false) String ids,
            HttpServletResponse response) throws Exception {
        //分割字符串得到id數組
        String[] idsStr = ids.split(",");
        JSONObject result = new JSONObject();
        for (int i = 0; i < idsStr.length; i++) {
            int id = Integer.parseInt(idsStr[i]);
             //其實在這裏我們要判斷該博客類別下面是否有博客 如果有就禁止刪除博客類別 ,等我們完成博客對應的操作再來完善
                blogTypeService.deleteBlogType(id);
        }
        result.put("success", true);
        ResponseUtil.write(response, result);
        return null;
    }





<div class="se-preview-section-delimiter"></div>

3、博客類別管理界面功能完善

還記得我們在datagrid中初始化的js代碼中寫的這段代碼嗎

 //上方工具條 添加 修改 刪除 刷新按鈕
            toolbar:[{
                iconCls: 'icon-add',    //圖標
                text: '添加',            //名稱
                handler: function () {  //回調函數
                    alert("添加");
                }
            },'-',{
                iconCls: 'icon-edit',
                text: '修改',
                handler: function () {
                      alert("添加");
                    }
            },'-',{
                iconCls: 'icon-edit',
                text: '刪除',
                handler: function () {
                      alert("刪除");
                }
            },'-',{
                iconCls: 'icon-reload',
                text: '刷新',
                handler: function () {
                     alert("刷新");
                }
            }],




<div class="se-preview-section-delimiter"></div>

這一段代碼是用戶給我們分頁顯示時添加對應的工具條 ,也就是這個樣子

工具條
代碼上面的註釋挺清楚,每個屬性對應的作用都有解釋。
我主要說一下handler屬性
當我們點擊對應的按鈕 就應該會執行函數,那麼這個函數的實現寫在哪裏,那就是寫在對應的handler中的,
所以我在對應的handler中寫上alert 測試一下handler有麼有執行,大家可以自行測試一下。
如果大家還是不懂得話所以在easyui API手冊中搜索toolbar

1、功能實現

說一下實現思路 當我們點擊添加按鈕或者修改按鈕 那麼系統就會彈出一個對話框讓我們輸入對應的信息,然後信息輸入完畢,單擊保存就會請求我們後臺對應的保存方法,將數據添加到數據庫,就提示添加成功,

Paste_Image.png

所以我們的第一步就是打開對話框
在 easyui中搜索dialog
我們查看EasyUI的文檔,發現新建一個窗口有兩種方法,要麼使用標籤創建,要麼使用js創建,我們這裏使用標籤創建,但是需要一個

盒子,如下:

Paste_Image.png
當我們點擊添加或者修改按鈕時 我們是處於blogTypeMange.jsp中 所以我們需要完善這個頁面其實能彈出對話框

<div id="dlg" class="easyui-dialog" style="width:500px; height:180px; padding:10px 20px"
     closed="true" buttons="#dlg-buttons">
    <form id="fm" method="post">
        <table cellspacing="8px">
            <tr>
                <td>博客類別名稱</td>
                <td>
                    <input type="text" id="typeName" name="typeName" class="easyui-validatebox" required="true">
                </td>
            </tr>
            <tr>
                <td>博客類別排序</td>
                <td>
                    <input type="text" id="orderNum" name="orderNum" class="easyui-numberbox" required="true"
                           style="width:60px">&nbsp;(博客類別會根據序號從小到大排列)
                </td>
            </tr>
        </table>
    </form>
</div>

<div id="dlg-buttons">
    <div>
        <a href="javascript:saveBlogType()" class="easyui-linkbutton" iconCls="icon-ok" plain="true">保存</a>
        <a href="javascript:closeBlogTypeDialog()" class="easyui-linkbutton" iconCls="icon-cancel" plain="true">關閉</a>
    </div>
</div>




<div class="se-preview-section-delimiter"></div>

其中 closed=”true”代表對話框默認是關閉的
buttons=”#dlg-buttons” 指定對話框的按鈕組爲下面id爲dlg-buttons的div

現在對話框已經創建好了

1.1、添加修改博客類別實現

對於添加或者修改來說其實他們可以共用一個對話框,區別就是
1、修改操作我們需要把id傳遞給後臺 讓後臺知道這是修改操作,
2、修改操作需要把數據回顯在對話框中

所以我們對話框中保存所執行的saveBlogType()方法可以添加或者修改可以通用 只不過是請求的url不同 當我們點擊不同按鈕 設置不同的url即可


//定義全局url 用於修改與添加操作
    var url;

//省略其他代碼  讓url聲明在第一行
 /**
  * 添加或者修改博客類別
  */
  function saveBlogType() {
        $("#fm").form("submit",{
            url: url,
            onSubmit: function() {
                return $(this).form("validate");
            }, //進行驗證,通過才讓提交
            success: function(result) {
                var result = eval("(" + result + ")"); //將json格式的result轉換成js對象
                if(result.success) {
                    $.messager.alert("系統提示", "博客類別保存成功");
                    $("typeName").val(""); //保存成功後將內容置空
                    $("typeNum").val("");
                    $("#dlg").dialog("close"); //關閉對話框
                    $("#dg").datagrid("reload"); //刷新一下
                } else {
                    $.messager.alert("系統提示", "博客類別保存失敗");
                    return;
                }
            }
        });
    }




<div class="se-preview-section-delimiter"></div>

這樣我們保存的操作就實現了 接下來就是在點擊不同的按鈕在不同按鈕的handler中設置對應的url即可

對於添加操作來說 我們只需設置對話框的標題以及請求的url即可

{
                iconCls: 'icon-add',    //圖標
                text: '添加',            //名稱
                handler: function () {  //回調函數
                    //打開對話框並且設置標題
                 $("#dlg").dialog("open").dialog("setTitle", "添加博客類別信息");
                //將url設置爲添加
                url = "${blog}/admin/blogType/save.do";
                }
}




<div class="se-preview-section-delimiter"></div>

對於修改操作來說 我們首先要判斷選中行的數目 確保被選中修改的只有一行 然後獲取選中的行的信息 把選中行的信息回顯在對話框中
然後設置設置對話框的標題以及請求的url即可

{
                iconCls: 'icon-edit',
                text: '修改',
                handler: function () {
                      //獲取選中要修改的行
        var selectedRows = $("#dg").datagrid("getSelections");
        //確保被選中行只能爲一行
        if(selectedRows.length != 1) {
            $.messager.alert("系統提示", "請選擇一個要修改的博客類別");
            return;
        }
        //獲取選中行id
        var row = selectedRows[0];
        //打開對話框並且設置標題
        $("#dlg").dialog("open").dialog("setTitle", "修改博客類別信息");
        //將數組回顯對話框中
        $("#fm").form("load", row);//會自動識別name屬性,將row中對應的數據,填充到form表單對應的name屬性中
        //在url中添加id 後臺就能識別是更新操作
        url = "${blog}/admin/blogType/save.do?id=" + row.id;
                    }
            }





<div class="se-preview-section-delimiter"></div>

接下來我們繼續完善對話框關閉即可
這個功能很簡單,把對話框中內容置空 然後關閉即可

 function closeBlogTypeDialog() {
        $("typeName").val(""); //保存成功後將內容置空
        $("typeNum").val("");
        $("#dlg").dialog("close"); //關閉對話框
    }




<div class="se-preview-section-delimiter"></div>

1.2、刪除博客類別以及刷新實現

由於我們的系統是支持多選刪除的操作的
所以第一步

1、獲取選中行的對象的數組
2、判斷是否有選中行
3、將選中行的id放入數組中
4、將id數組連接成字符串
5、彈出是否確定刪除對話框
6、發送ajax請求 進行數據庫刪除
7、獲取後臺返回數據 提示是否刪除成功 如果刪除成功 重新載入數據

{
                iconCls: 'icon-edit',
                text: '刪除',
                handler: function () {
                      //獲取選中要刪除的行
        var selectedRows = $("#dg").datagrid("getSelections");
        //判斷是否有選擇的行
        if(selectedRows.length == 0) {
            $.messager.alert("系統提示", "請選擇要刪除的數據");
            return;
        }
        //定義選中 選中id數組
        var idsStr = [];
        //循環遍歷將選中行的id push進入數組
        for(var i = 0; i < selectedRows.length; i++) {
            idsStr.push(selectedRows[i].id);
        }
        //將數組安裝,連接成字符串
        var ids = idsStr.join(","); //1,2,3,4
        //提示是否確認刪除
        $.messager.confirm("系統提示", "<font color=red>您確定要刪除選中的"+selectedRows.length+"條數據麼?</font>", function(r) {
            if(r) {
                $.post("${blog}/admin/blogType/delete.do",
                    {ids: ids}, function(result){
                        if(result.exist) {
                            $.messager.alert("系統提示", '該類別下有博客,不能刪除!');
                        } else if(result.success) {
                            $.messager.alert("系統提示", "數據刪除成功!");
                            $("#dg").datagrid("reload");
                        } else {
                            $.messager.alert("系統提示", "數據刪除失敗!");
                        }
                    }, "json");
            }
        });
                }
            }




<div class="se-preview-section-delimiter"></div>

刷新操作就比較簡單了 讓我們的datagrid reload一下就可以了

{
                iconCls: 'icon-reload',
                text: '刷新',
                handler: function () {
                            $("#dg").datagrid("reload");
                }
            }

到此 我們完成了博客類別的添加修改刪除刷新操作了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章