为什么我在表格中修改的数据不能保存?

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}");' />
				&nbsp;
			<img id="" name="" src="../images/table/delete.gif" align="ABSMIDDLE" 
				style="cursor:hand" alt="删除勾选项目" onclick="deleteUserInfo('ec');" />
				&nbsp;
			<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方法吧
Global site tag (gtag.js) - Google Analytics