SCM项目总结
項目總遇到的bug總結:
1. 2017/7/15:在SupplierAction.java的deleteList方法中,沒有加注釋@RespopnseBody,導致返回數據不是json格式。$.ajax異步刪除執行了error方法. SupplierAction.java@RequestMapping("/deleteList")@ResponseBodypublic Object deleteList(String[] pks) {System.out.println("---pks:" + pks);int i = 0;try {i = supplierService.deleteList(pks);} catch (Exception e) {e.printStackTrace();}//System.out.println("------"+i+"----------");return i;}supplierlist.jspiconCls : 'icon-remove',text : '刪除',handler : function() {//$("#dg").datagrid("getSelections")//獲取選中的記錄var array = $("#dg").datagrid("getSelections");//alert(array);//判斷是否選中if (array.length > 0) {//定義數組,通過下邊的用來存儲選中記錄的Idvar ids = new Array();for (i = 0; i < array.length; i++) {ids[i] = array[i].supId;//alert(ids[i]);}//alert("ids" + ids);//如果需要鎖整個頁面,前面加parent.parent.$.messager.confirm('刪除對話框', '您確認要刪除嗎?', function(r) {if (r) {$.ajax({url: "${proPath}/supplier/deleteList.action",type:"POST",//設置為傳統方式傳送參數traditional:true,data:{pks:ids},success: function(html){//重新刷新頁面$("#dg").datagrid("reload");//請除所有勾選的行$("#dg").datagrid("clearSelections");},error: function (XMLHttpRequest, textStatus, errorThrown) {$.messager.alert('刪除錯誤','請聯系管理員!','error');}dataType:'json'});}});} else {$.messager.show({title : '操作提示',msg : '請先選擇要刪除的記錄。',timeout : 4000,showType : 'slide'});}}
關于 springMVC為什么能自動把數據轉成json格式?
其實是<mvc:annotation-driven></mvc:annotation-driven>起作用 詳情看這篇博客:http://blog.csdn.net/zjkc050818/article/details/751878512017/7/17 今天去華辰實習,晚上回來有點時間,做做視頻里的項目。 主要就是在jsp頁面中顯示復合屬性。 即:供應商Supplier類中包含一個SysParam系統參數類,在jsp頁面中需要顯示SysParam中的某個屬性。 剛開始我是這樣寫的
{field : 'sysParam.sysParamText',title : '供應商類型',width : 100,}},然鵝,頁面中什么沒有顯示任何內容。 供應商類型無法顯示呢,我試著把jsp中代碼改成這樣:
{field : 'sysParam',title : '供應商類型',width : 100,},
界面中該字段就顯示為[Object Object]
后來google百度了好久,發現原來需要一個格式轉換器。 代碼改成以下的格式,就可以顯示了
{field : 'sysParam',title : '供應商類型',width : 100,formatter : function(value, row, index) {return row['sysParam']['sysParamText'];//return value.get(0);}}
2017/7/18 今天在實驗室繼續做項目 完成的模塊是:由于供應商的編號及其名字是經常用到的信息,所以想做一個優化:在數據庫中建立一個系統參數表Sys_Param表,用來記錄應用經常用到的一些參數。 因為這些參數經常使用,而經常訪問數據庫是非常浪費資源的,就想要用一個Map來存儲相關數據,然后把這個map放在ServletContext作用域中。 那么,很自然想到新建一個SysParamInitServlet,然后再servlet的init()方法中進行相關操作,且!在web.xml要設置<load-on-startup>3</load-on-startup> 然后再servlet利用@AutoWired注入 @Autowired private SysParamService sysParamService;就這樣問題出現了,系統在調用sysParamService的方法時報空指針異常
出錯原因:由于servlet是在容器初始化的時候也進行初始化,所以通過@Autowired注入會失敗(容器中這個bean可能還沒有初始化) 改成以下代碼問題解決:
ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");SysParamService sysParamService=(SysParamService) ac.getBean("sysParamService");
2017/7/18 今晚主要做供應商修改的模塊
因為需要將數據庫中的數據顯示在form表單中,然后再對表單中的數據進行修改。 方法:將供應商的id寫在請求url后,即$("#formID").form('load','${proPath}/supplier/findById.action?supId='+selectedSup.supId); Action的方法入參是Supplier對象,正常情況下supId會自動注入到supplier對象中,但是從服務器端完全獲取不到數據,即使調用request來獲取,也是null。 原因是,在action的@RequestMapping注解需要附加參數method=RequestMethod.GET。具體代碼如下: @RequestMapping(value="/findById",method=RequestMethod.GET)@ResponseBodypublic Supplier findById(Supplier supplier) {System.out.println("find-----find---find----supId:" + supplier);try {supplier= supplierService.findById(supplier);} catch (Exception e) {e.printStackTrace();throw new RuntimeException(e);} // return "forward:/jsp/main.jsp";return supplier;}
2017/7/26?前幾天比較忙,今天有點時間繼續做項目 今天做采購模塊,該模塊實現的功能是:在訂單頁面填相應的信息:訂單信息,商品信息。然后把這些數據持久化到相應的表中。 注意,業務層不僅僅只調用一個dao的insert方法,要把上面的信息插入到三張表中,所以必須進行相應的邏輯處理。 scm該模塊中,需要插入的表為:buy_order、buy_order_detail、account_records buy_order是form表單中的數據,由于其他兩張表中有依賴該張表,所以其他信息應該在buy_order表單提交時附帶,利用easyui中form表單的方法,如下所示:
//提交額外參數 $('#ff').form('submit', { url:..., onSubmit: function(param){ param.p1 = 'value1'; param.p2 = 'value2'; } }); 其他數據是放在datagrid中的,必須要轉成json格式,再方法上面的param參數中,實現方法如下:
//把datagrid所有行轉換成json格式 var data = $('#dg').datagrid('getData'); var rows = JSON.stringify(data.rows);if($("#ff").form('validate')){alert($("#ff").form('validate'));$('#ff').form('submit', {url : '${proPath}/buyorder/insert.action',onSubmit : function(param) {param.rows = rows;return true;},success : function(data) {//alert(data);} });這里有一個易錯點,就是涉及到日期的轉換。jsp提交的數據都是String格式,如果不進行String到Date的轉換,會報 Failed to convert from type?Java.lang.String to type java.util.Date for value
現數據庫有個字段在Entity中的類型是Date的,然后表單傳過來的數據時String類型的,這時就會出現這樣的問題,類型轉換錯誤!
二、解決辦法
要加一個@InitBinder,查了一下資料,貌似是用于初始化數據的時候,進行數據類型轉換,吧String類型轉為Date類型,這樣就不會報錯了。
[java]?view plaincopy print?
這樣問題就解決了,這個要加在相關的Controller里面,然后利用注解自動裝配就OK了。。。。
2017/7/26晚?在進行把數據持久化到數據庫的時候報錯,具體如下:
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.builder.BuilderException: Parsing error was found in mapping #{shId),#{boDate}. Check syntax #{property|(expression), var1=value1, var2=value2, ...} at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:73)
還在解決中。。。。。。。。。。。。。。。。。。。 哈哈哈,花了一個小時終于找出錯誤,有點瞎 <insert id="insert" parameterType="buyOrder">insert into buy_order(bo_id,sup_id,sh_id,bo_date,bo_payable,bo_paid,bo_arrears,bo_original,bo_remark,bo_attn,bo_operator)values(#{boId},#{supId},#{shId),#{boDate},#{boPayable},#{boPaid},#{boArrears},#{boOriginal},#{boRemark},#{boAttn},#{boOperator})</insert>
這是編寫的BuyOrderMapper.xml中間插入語句,仔細看,#{shId}右邊是圓括號!!!!!心情復雜
總結
- 上一篇: 游戏引擎:BigWorld(大世界3D游
- 下一篇: 电脑端查看CAD图纸也能非常方便