基于Struts2的SingleEdit插件的使用。

十一郎的IT 2009-12-17

前些日子看到网友wbfsa发布了SingleEdit插件,基于JQuery的表单信息修改工具。颇具特色。项目中我使用Struts2,已经整合了Uploadify和JqGrid两个组件,基本可实现操作的异步处理,效果更佳绚丽。

这次使用SingleEdit,在页面中也就实现了最原始的数据修改效果,因为在使用JqGrid时,是基于一条记录进行的。而SingleEdit可以针对一个字段修改,非常实用。在看过wbfsa提供的帮助文档后,我把它集成到Struts2中。代码如下:

页面:想了解更多可以参考wbfsa的博客。

<table class="default" width="100%">
		<col width="20%" align="center">
		<col width="30%" align="center">
		<col width="20%" align="center">
		<col width="30%" align="center">
		<tr class="title">
			<td align="center" colspan="4">个人信息</td>
		</tr>
		<tr class="strong">
			<td colspan="4">您可以修改除用户名以外的信息</td>
		</tr>
		<tr>
			<td>用户名</td><td>${loginUser.USERNAME}</td>
			<td>真实名</td><td><div class="edit" id="realname"></div></td>
		</tr>
		<tr>
			<td>性别</td><td><div class="edit" id="sex">${pInfo.SEX}</div></td>
			<td>身份证号</td><td><div class="edit" id="idcard">${pInfo.IDCARD?default("(点击填写)")}</div></td>
		</tr>
		<tr>
			<td>生日</td><td><div class="edit" id="birthday">${pInfo.BIRTHDAY?default("(点击填写)")}</div></td>
			<td>E-mail</td><td><div class="edit" id="email">${pInfo.EMAIL?default("(点击填写)")}</div></td>
		</tr>
	</table>

这里应用了一些自定义的CSS样式,您可以对应修改

页面都很简单,不做介绍了

SingleEdit的Js和css可以参照wbfsa的文章

<script type="text/javascript">
        $(function() {
            $(".edit").singleEdit({
            	zID: "${loginUser.USERID}",
                url:"user!editInfo.action?time="+new Date().getTime(),
                ajaxenable: true,
                ajaxType: "GET",
                acceptID: "1",
                refreshID: "2",
                selection:[
                	 { id: "usex", item: [{ zID: "男", zname: "男" }, { zID: "女", zname: "女" }]}
                ],
                data: { 
                	realname: "${loginUser.REALNAME}"
                },
                main: [
                 { id: "realname", field:"realname", type: "textbox" },
                 { id: "sex", itemid:"usex", field:"sex", type: "radio", radiosettings:2 },
                 { id: "idcard", field:"idcard", type: "textbox" },
                 { id: "birthday", field:"birthday", type: "date" },
                 { id: "email", field:"email", type: "textbox"}
                ]
            });     
         });   
    </script>

重点解释Ajax段JS代码,其他的参考wbfsa的帮助文档,那更详细。

zID是更新的依据,就是该记录的主键,注意大小写

url是请求处理的地址,这里是Struts2的,就不多说了

ajaxType当前还只能是GET,可能是源文件这里有BUG,我这POST不好用,获取不到参数

后面的代码就是数据处理了。只要这段代码写在ftl文件里面,那么freemarker就可以直接填充数据,在js段也可以使用${}获取值。很方便。

后台处理代码如下:

/**
	 * SingleEdit插件更新数据的方法
	 */
	public String editInfo() {
		getServMgr().getUserService().editUserInfo(field, value, zID);
		Map dbUser = getServMgr().getUserService().getUserByUserName(getLoginUserName());
		getSession().put(Constants.LOGIN_USER, dbUser);
		return null;
	}

该方法不需要返回值,异步更新只是执行以下方法。这里的参数field,value和zID就是页面传入的参数了。在该java文件里面需要有相应的set方法。

getLoginUserName()是写在自定义基类的一个方法,就是获取当前登录用户的用户名,不要页面传入这个参数,从session中拿,安全性很高。

后面就是把更新好的数据再次放入session,时时更新。

Service中的方法:

public void editUserInfo(String field, String value, String userId) {
		StringBuffer editSQL = new StringBuffer("update users set ");
		editSQL.append(field + "=? ").append("where userId=" + userId);
		jt.update(editSQL.toString(), new Object[] { value });
	}

我是通过StringBuffer拼接SQL语句的,当然也可以直接拼接,这样就可以达到SQL语句的动态化,字段和值都是自适应的。数据持久层使用SpringJdbcTemplate。

本人才疏学浅,还望各位高手指教。

效果可以参考原作者的演示,很详细。

相关推荐

sunh / 0评论 2013-06-19