【項目筆記】完成一個基於SSM框架的增刪改查的模塊後總結的問題

最近爲了準備新工做從新摸出了SSM框架,同時從0學習了JQuery,終於用一週作完了一個包括增刪改查的模塊(主要是屬性太多了,其中一個類50+,複製粘貼耗時)。html

從中特地記下了幾個遇到的問題,總結一下。前端

 

1. 執行網頁js代碼時, 出現$ is not defined錯誤。jquery

緣由:未引入JQuery,須要在HTML代碼中加入如下代碼:ajax

<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>

 

2. 經過Ajax向SSM的後臺傳遞一個Map轉JSON的數據時,沒法調用方法request.getParameter(name)來獲取屬性名稱。數據庫

緣由:具體見:https://blog.csdn.net/u010648555/article/details/79084466json

將代碼作以下修改便可成功:後端

$.ajax({
    url:selectUrl,
    type:'POST',
    data:dataMap, //而不是JSON.stringify(dataMap)
    contentType: "application/x-www-form-urlencoded", //而不是"application/json"
    success: function(data) {
        if(data.success) {
            alert('提交成功!');
        } else {
            alert('提交失敗!' + data.errMsg);
        }
    }
}); 

 

3. 頁面輸入的中文傳到後臺變成了亂碼。app

緣由:數據庫和網頁須要統一utf-8的編碼。將問題2中的代碼改成如下便可:框架

contentType: "application/x-www-form-urlencoded; charset=utf-8",

 

4. 因爲有動態、異步插入<option>的需求,同時有「增長新狀況」的需求,須要等動態加載完選項後保存下可增項的HTML代碼,以便在按下「增長」按鈕後添加在頁面上。異步

解決:1. 每當一個<select>加載完後,更新一次可增項的HTML代碼。

   2. 使用$.when()方法(http://www.runoob.com/jquery/misc-when.html),以下例子:

//獲取html
var addHtml = '';
$.when(getList1(), getList2()).done(function() { addHtml= '<div class="item">' + $('.item').html() + '</div>'; }); //更新屬性1
function getList1() {
    var initUrl = '/getattr1';
    return getAttrList(initUrl, 'attr1');
}

//更新屬性2
function getList2() {
    var initUrl = '/getattr2';
    return getAttrList(initUrl, 'attr2');
}

function getAttrList(url, idname) {
    return $.getJSON(url, function(data) {
                  if(data.success) {
                      var tempHtml = '';
                      data.info.map(function(attr, index) {
                          tempHtml += '<option class="text-style" value="' + attr.attrid+ '">' + attr.attrval+ '</option>';
                      });
                      $('#' + idname).html(tempHtml);
                  } else {
                   $.toast(data.errMsg);
                  }
              });
}

 

 5. 前端向後端傳遞參數時,@RequestBody不能放多個不一樣的對象。

解決:能夠把這些對象封裝起來,好比:

public class AllAttrs {
    private Attr1 attr1;
    private List<Attr2> attr2list;
    private List<Attr3> attr3list;

    //get/set方法略
}
public class AttrController {
    @RequestMapping(value = "updateattr", method = RequestMethod.POST)
    @ResponseBody
    private Map<String, Object> updateAttr(@RequestBody AllAttrs allAttrs) {
        Map<String, Object> modelMap = new HashMap<>();
        //處理代碼略
        return modelMap;
    }
}

 

6. 若是更新項有「更新時間」這一屬性,且要求「沒有更新內容的時候須要特別提示」,update的時候須要注意。

更新時前端不會向後端傳遞更新時間,若是將更新時間設定爲null或者取當前時間,那麼update後會返回1,沒法判斷有沒有更新內容。

所以設計SQL的時候,相似這樣的屬性變量要判斷是否爲空(加<if>標籤),若是不爲空才更新這個屬性。

 

7. MyBatis中,保持原值不變,update後返回值不爲0。

緣由:MyBatis返回的是匹配值而不是影響值,若是須要影響值,在jdbc.properties中須要加上「&useAffectedRows=true」。

相關文章
相關標籤/搜索