为什么我在表格中修改的数据不能保存?
|
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方法吧 |

