为什么我在表格中修改的数据不能保存?
iampotato
2007-03-21
我在页面中修改了数据,进行保存时,总是提示“没有记录被编辑过”,我用的程序框架是Webwork+Spring+IBatis,后台action我是参照“MyTestAction.java”写的。
不知是怎么回事?望赐教! |
|
fins
2007-03-21
我估计可能是你的js写的不对吧
你能不能把 jsp和所使用的js发来看看 |
|
iampotato
2007-03-21
fins,你好,我把整个项目发到了你的邮箱,谢谢你。
|
|
iampotato
2007-03-22
用的JS是DEMO里的ecside.js,我没有动过。
用的JSP页面(ceshi_Yh.jsp): <%@ page contentType="text/html; charset=gb2312"%> <%@ include file="/include/taglib.jsp" %> <html> <head> <title>技术储备</title> <link rel="stylesheet" type="text/css" href="../resources/welcome.css"/> <link rel="stylesheet" type="text/css" href='<c:out value="${pageContext.request.contextPath}"/>/style/extremecomponents.css' /> <link rel="stylesheet" type="text/css" href='<c:out value="${pageContext.request.contextPath}"/>/style/td_style.css' /> <link rel="stylesheet" type="text/css" href='<c:out value="${pageContext.request.contextPath}"/>/style/td_style_ec.css' /> <script type="text/javascript" src='<c:out value="${pageContext.request.contextPath}"/>/script/ecside.js' > </script> <script type="text/javascript" src='<c:out value="${pageContext.request.contextPath}"/>/script/prototypeajax.js' > </script> <script type="text/javascript" > function init(){ var ecside1=new ECSide(); ecside1.init(); } /*====================== 编辑 相关 ======================== */ /* 向后台更新列表中所有被编辑过的行 */ var listRows=null; function saveUserInfo(formid){ var url="/WebWorkIbatisMy/system/xtyhSave.action"; // EccnUtil.doAjaxListUpdate 用来进行向后台更新列表的操作 // 返回的是 被提交到后台的行的集合。 listRows=EccnUtil.doAjaxListUpdate(formid,url,updateCallBack); if(!listRows || listRows.length<1){ alert("没有记录被编辑过!")} } function updateCallBack(responseObj){ var result=responseObj.responseText; result=ECSideUtil.trimString(result); var rs=result.split("\n"); if (EccnUtil.trimString(rs[0])!="1") { alert("*刚刚对 "+EccnUtil.trimString(rs[2])+" 的更新 操作失败!!"); }else{ alert("刚刚对 "+EccnUtil.trimString(rs[2])+" 的更新 操作成功!!"); EccnUtil.getRemoveEditedClassRows(listRows,rs[1]); } EccnUtil.WaitingBar.hide(); } /* 删除列表中选中的数据 */ var delRows=null; function deleteUserInfo(formid){ var url="/WebWorkIbatisMy/system/xtyhDelete.action"; if(confirm("确定要删除选中的记录吗?")){ var checkBoxList=ECSideList[formid].ECForm["deleteFlag"]; for (var i=0;i<checkBoxList.length;i++){ if (checkBoxList[i].checked){ var rowObj=checkBoxList[i].parentNode.parentNode; rowObj.setAttribute("deleted","true"); } } alert("delete rowObj: "+rowObj[0]); delRows=ECSideUtil.doAjaxListDelete(formid,url,deleteCallBack); if(!delRows || delRows.length<1){ alert("没有记录被选中!")} } } function deleteCallBack(responseObj){ var result=responseObj.responseText; result=ECSideUtil.trimString(result); var rs=result.split("\n"); if (ECSideUtil.trimString(rs[0])!="1") { //操作失败 }else{ //操作成功 ECSideUtil.getRemoveDeletedRows(delRows,rs[1]); } EccnUtil.WaitingBar.hide(); } // 导出数据 通过eFileName指定的文件的扩展名来确定类型 目前支持 xls,txt csv function exportUserInfo(){ $(ec_ecs_export_iframe).location="/WebWorkIbatisMy/system/xtyhExportXls.action?fileName=test.xls"; } </script> </head> <body onload="init()"> <ec:table items="systemYhList" var="user" action="${pageContext.request.contextPath}/system/xtyhList.action" title="数据分页接口测试_系统用户" sortable="true" toolbarLocation="bottom" toolbarContent="navigation|pagejump|pagesize|extend|status" nearPageNum="3" maxRowsExported="400" minColWidth="30" resizeColWidth="false" editable="true" width="100%" height="300px" filterRowsCallback="limit" > <!-- 注意第2个column,它实现了 shadowRow。主要是那个EccnUtil.showShadowRow('${ecTableId}',this.parentNode,this) 函数 EccnUtil.showShadowRow( 参数1 最终生成的form的id,省略的话会默认是 ec ; 参数2 当前行; 参数3 事件源) --> <!-- recordKey 用来指定 行(每条记录)的唯一标识的值 可以理解为记录的主键 如果是联合主键 可以用类似这个例子中的方法进行拼串 --> <ec:row recordKey="${user.userid}" > <ec:column width="40" property="userid" title="序号" sortable="false" style="text-align:center;"> ${GLOBALROWCOUNT} </ec:column> <ec:column cell="checkbox" headerCell="checkbox" alias="deleteFlag" value="1" width="8" /> <ec:column alias="操作" width="50" style="text-align:center;"> <button type="button" onclick="" style="width:40px">修改</button> </ec:column> <ec:column property="userid" alias="用户编号" width="80"/> <ec:column property="username" alias="用户姓名" cellEdit="input" tagAttributes="title='双击进行编辑'"/> <ec:column property="password" alias="用户密码" cellEdit="input" width="100" tagAttributes="title='双击进行编辑'"/> <ec:column property="dwdm" title="单位代码" width="150" tagAttributes="title='双击进行编辑'" cellEdit="select,select_template_dwdm" cellValue="${user.dwdm}" mappingItem="DWDM_MAP" mappingDefaultValue="[未知单位代码]"/> <ec:column width="70" property="zt" title="用户状态" tagAttributes="title='双击进行编辑'" cellEdit="select,select_template_zt" cellValue="${user.zt}" mappingItem="ZT_MAP" mappingDefaultValue="[未知状态]"/> </ec:row> <ec:extend> <div style="text-align:center;width:100%;padding:3px"> <img id="" name="" src="../images/table/save.gif" align="ABSMIDDLE" style="cursor:hand" alt="保存已修改内容" onclick='saveUserInfo("${ecTableId}");' /> <img id="" name="" src="../images/table/delete.gif" align="ABSMIDDLE" style="cursor:hand" alt="删除勾选项目" onclick="deleteUserInfo('ec');" /> <img id="" name="" src="../images/table/xls.gif" align="ABSMIDDLE" style="cursor:hand" alt="导出到Excel" onclick="exportUserInfo();" /> </div> </ec:extend> </ec:table> <!-- 模版域 模版可手动修改 --> <textarea id="ec_edit_template_input" rows="" cols="" style="display:none"> <input type="text" class="inputtext" value="" onblur="EccnUtil.updateCell(this,'input')" style="width:100%;" name="" /> </textarea> <textarea id="select_template_dwdm" rows="" cols="" style="display:none" > <select onblur="EccnUtil.updateCell(this,'select')" style="width:100%;" name="dwdm" > <ec:options items="DWDM_MAP" /> </select> </textarea> <textarea id="select_template_zt" rows="" cols="" style="display:none" > <select onblur="EccnUtil.updateCell(this,'select')" style="width:100%;" name="ZT" > <ec:options items="ZT_MAP" /> </select> </textarea> <!-- end of 模版域 --> </body> </html> |
|
iampotato
2007-03-22
后台action的java代码:
public ActionForward save(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response){ System.out.println("==================>>save... "); try { Map formMap=request.getParameterMap(); //进行更新操作并返回更新的记录数 //UserInfoDAO userInfoDAO=(UserInfoDAO)getBean("userInfoDAO"); //int opresult=userInfoDAO.doUpdateUserInfo(formMap); int opresult=1; response.setContentType("text/html"); PrintWriter out=response.getWriter(); System.out.println("==============>>opresult:"+opresult); out.println(opresult); out.println(((String[])formMap.get(TableConstants.RECORDKEY_NAME))[0]); out.print(((String[])formMap.get("USERNAME"))[0]); out.flush(); out.close(); } catch (Exception e) { LogHandler.exceptionLog(e, this.getClass().getName()); } return null; } |
|
iampotato
2007-03-22
找到原因了,是因为页面中的onclick="saveUserInfo('${ecTableId}');"中,“${ecTableId}”不能转变成“ec”,我直接把“${ecTableId}”替换为“ec”就可以了。
不知为什么不能转换? |
|
fins
2007-03-22
你的 web应用不支持公式语言
|
|
iampotato
2007-03-22
是不是web应用不支持公式语言就不能应用ECSide了?
如果这样的话,怎样才能做到在我的web应用支持公式语言? 谢谢! |
|
iampotato
2007-03-22
另外,保存时,控制台出现以下提示,是什么原因?
11:18:27,859 INFO [STDOUT] 11:18:27,859 ERROR [DispatcherUtils] Could not execute action java.lang.IllegalArgumentException: Neither doAjaxUpdate() nor it's doXxx() equivalent is defined in action class com.suypower.example.system.action.Ceshi_XtyhListAction ...... |
|
fins
2007-03-22
不支持也能用
你action里没有doAjaxUpdate方法吧 |