目標:本週做了一個300多項的form表單查詢和保存。
思考:之前做查詢和保存,用的是提交後同步跳轉;這次想使用不同的方式來做;採用了ajax異步查詢和保存試試。
過程:
選擇jQuery中的ajax函數和spring mvc框架,數據交互採用json形式
先寫後臺,類用了註解
@Controller
@RequestMapping("/baController")方法用了註解
@RequestMapping(value="/queryba.do", produces = {"application/json;charset=UTF-8"})
@ResponseBody
json框架用了ali的fastjson,補充一點:默認的json中的key是小寫字母,所以我設置了變量在代碼裏;返回json中有漢字,用到了produces裏的設置;ResponseBody設置,可以直接在方法最後返回json,不用在指定dispatcher
//設置json串中key首字母是大寫
static
{
TypeUtils.compatibleWithJavaBean = true;
}
後臺寫jdbc查詢時,用了以下代碼:
RowMapper<BaBean> rm = ParameterizedBeanPropertyRowMapper.newInstance(BaBean.class);
try{
BaBean ba = (BaBean)jdbcTemplate.queryForObject(sql, rm);
//轉爲json
String strjson = JSON.toJSONString(ba);
return strjson;
}catch(EmptyResultDataAccessException e){
return "{\"result\":\"false\"}";
}
通過很短方式,就把300多項數據組裝完畢,效率還是蠻高的。spring的jdbcTemplate.queryForObject方法再拼接大數據量時,效率高。
3.驗證後臺沒問題後,再寫前臺:
前臺頁面中工作量最大的就是標籤裏的300多項,咬牙寫完;在查詢和保存中,都用到了一些小技巧,查詢後渲染頁面中的值,採用json數據循環:
//查詢
$(document).ready(function(){
$("#bq").click(function(){
var caseid= $("#querybah").val();
$.ajax({url:"/jmyy/baController/queryba.do?caseid="+caseid,
async:false,
dataType:"json",
cache: false,
success:function(data){
if(data["result"]=="false"){
alert("沒查詢出結果");
}else{
for(var item in data){
var jValue=data[item];//key所對應的value
$("#"+item).attr("value",jValue);
}
}
}
});
}
);
});
修改後保存,採用了form表單的序列化,避免了手動去遍:
//保存
$(document).ready(function(){
$("#bb").click(function(){
$.ajax({
type:"POST",
url:"/jmyy/baController/saveba.do",
data:$("#baform").serializeArray(),
dataType:"json",
cache: false,
success:function(data){
alert("保存成功!");
//數據清空
window.location.reload();
}
});
}
);
});