列式存储(二)JFinal如何处理从前台传回来的二维数组

上一篇说到了列式存储,这一篇说它的存储问题,将每个模块的所有属性字段单独存到一张表中,新增页面时,所有的字段都去数据库请求,这样多个模块的新增功能可以共用一个jsp。由于每个模块的字段个数不一样,有的多有的少,这就导致用post请求发送数据时参数个数不能写死,于是只好把整个dataArray传给后台,以前没用过这种写法,自己又是个菜鸟,就用了一个很笨的办法,就是用for循环加getPara()方法接收数据。具体方法见代码:

dataArray结构:

 

js发送post请求,将数组dataArray作为参数传给后台

function postData() {
    $.post("saveData", {
        "dataArray" : dataArray,  //dataArray是一个二维数组,每个数组元素均为一个对象
        "dataArrayLength" : dataArray.length
    }, function(data) {
        window.history.back();
    });
    return false;
}

Controller接收数据

    public void saveData() {
        int dataArrayLength= getParaToInt("dataArrayLength");
        List<DataModel> dataList = getParams(dataArrayLength);
     boolean result = DataService.srv.saveData(dataArrayLength, dataList); //将数据存到数据库中 }
private List<DataModel> getParams(int dataArrayLength) { List<DataModel> dataList = Lists.newArrayList(); for (int i = 0; i < dataArrayLength; i++) { DataModel dataModel = new DataModel(); dataModel.id = getPara("dataArray[" + i + "][ID]");
       dataModel.resId = getPara("dataArray[" + i + "][RES_ID]"); dataModel.resType
= getPara("dataArray[" + i + "][RES_TYPE]"); dataModel.fieldId = getPara("dataArray[" + i + "][FIELD_ID]"); dataModel.fieldName = getPara("dataArray[" + i + "][FIELD_NAME]"); //属性名 dataModel.dataValue = getPara("dataArray[" + i + "][DATA_VALUE]"); //属性值 dataModel.fieldType = getPara("dataArray[" + i + "][FIELD_TYPE]"); dataModel.fieldSort = getPara("dataArray[" + i + "][FIELD_SORT]"); dataModel.allowNull = getPara("dataArray[" + i + "][ALLOW_NULL]"); dataList.add(dataModel); } return dataList; }

 由于一个字段在数据库中即是一条数据,因此汪数据库存储dataList时需要用到事务。

posted @ 2016-10-18 13:23  细雨落花  阅读(1513)  评论(0编辑  收藏  举报