Jeditable - Edit In Place Plugin For jQuery,是一款JQuery就地编辑插件。也就是在页面直接点击需要编辑的内容,就会自动变成文本框进行编辑。它的官方网站是http://www.appelsiini.net/projects/jeditable,我们可以下载JS源码,查看示例。
示例代码比较简单,但确是PHP编写的,也没有提供出来,所以我们要探索在Java环境下进行数据操作的方式。由于一直使用Struts2作为控制器,所以便探究了在Struts2下使用Jeditable的方法。
首先在页面引入JS文件,只有一个。也不大。代码如下:
- <script language="javascript" src="js/plugin/jquery_jeditable.js"></script>
<script language="javascript" src="js/plugin/jquery_jeditable.js"></script>
在页面中,我们有如下内容:
代码如下:
- <td class="item">姓名</td><td id="realName">Sarin</td>
<td class="item">姓名</td><td id="realName">Sarin</td>
我们要编辑姓名,就在<td>标签上加注id属性,标识该单元。则在页面中添加如下JS代码,就可以得到编辑框的效果:
- $("#realName").editable("${base}/personal/edit.action?time="+new Date().getTime(), {
- indicator : "<img src='${base}/images/indicator.gif'>",
- submitdata: { _method: "post" },
- tooltip : "点击修改...",
- style : "inherit"
- );
$("#realName").editable("${base}/personal/edit.action?time="+new Date().getTime(), { indicator : "<img src='${base}/images/indicator.gif'>", submitdata: { _method: "post" }, tooltip : "点击修改...", style : "inherit" });
因为是使用Struts2处理请求,那么请求地址就是.action的,这个没有什么多说的。下面简单来说说JS代码,这里用最简单的文本框来做演示,其他效果可以到官网去看例子,都很好使用。
indicator是请求处理过程中的显示效果,这里用图片来代替,这个图片也是从官网找到的,或者写一些提示文字,比如”Saving…”。submitdata中我们指定了操作的提交方式,post很好理解了。tooltip中指的是当鼠标移动到编辑区域时的显示文字。style就是编辑时的样式了,这个不是要紧的东西,可以参考文档。这样配置就完成了。下面看看效果:
点击时就变成可编辑的效果了,这样我们不用再自己去写JS代码,用Jeditable来帮助非常不错。要保存内容,输入完回车即可。
下面的问题就是页面和后台通信,保存数据。使用Struts2提供的方法我们可以看到它向后台发送了什么数据。可以使用如下代码:
- ActionContext.getContext().getParameters();
ActionContext.getContext().getParameters();
打印之后 我们可以看到有id和value两个属性传回,参考jeditable的文档发现id属性就是我们要修改内容的标识符,value属性是我们输入的更新内容。这两个参数名其实是可以修改的。在JS代码中这样写就可以了:
- $("#realName").editable("${base}/personal/edit.action?time="+new Date().getTime(), {
- indicator : "<img src='${base}/images/indicator.gif'>",
- submitdata: { _method: "post" },
- id :"realName",
- value : "param",
- tooltip : "点击修改...",
- style : "inherit"
- );
$("#realName").editable("${base}/personal/edit.action?time="+new Date().getTime(), { indicator : "<img src='${base}/images/indicator.gif'>", submitdata: { _method: "post" }, id :"realName", value : "param", tooltip : "点击修改...", style : "inherit" });
这样到后台的属性名就变成realName和param了但是二者的值不变,我们不做改变,还是使用id和value,那么已经确定value就是我们修改的内容,那么id的值是什么呢?就是我们在<td>中设置的id值,当然也可以在<td>中套用div,这个就是看个人设置的样式进行了。知道了这些,我们就可以向Struts提交请求进行处理了。
在这里我们使用ActionContext.getContext().getParameters();获得属性是Map类型的,所以抽象出一个工具类来提供从Map中解析出String和Object[]数组的方法,就可以使用jdbcTemplate来进行数据库操作了。抽取如下:
- package xx.xxxx.util;
- import java.util.*;
- public class MapUtil {
- /**
- * 从Map中获取数据,能自动取得Object数组中第一项
- */
- public static Object getObjectFromMap(Map map, String key) {
- Object value = map.get(key);
- if (value != null && (value instanceof Object[])) {
- Object[] array = (Object[]) value;
- if (array != null && array.length > 0) {
- value = array[0];
- }
- }
- return value;
- }
- /* 获取字符串 */
- public static String getStringFromMap(Map map, String key) {
- Object value = getObjectFromMap(map, key);
- if (value == null)
- return null;
- if (value instanceof String) {
- return (String) value;
- }
- return value.toString();
- }
- /* 获取对象数组 */
- public static Object[] getObjectArrayFromMap(Map map, String key) {
- String[] keys = key.split(",");
- Object[] tmp = new Object[keys.length];
- for (int i = 0; i < keys.length; i++) {
- tmp[i] = getObjectFromMap(map, keys[i].trim());
- }
- return tmp;
- }
- }
package xx.xxxx.util; import java.util.*; public class MapUtil { /** * 从Map中获取数据,能自动取得Object数组中第一项 */ public static Object getObjectFromMap(Map map, String key) { Object value = map.get(key); if (value != null && (value instanceof Object[])) { Object[] array = (Object[]) value; if (array != null && array.length > 0) { value = array[0]; } } return value; } /* 获取字符串 */ public static String getStringFromMap(Map map, String key) { Object value = getObjectFromMap(map, key); if (value == null) return null; if (value instanceof String) { return (String) value; } return value.toString(); } /* 获取对象数组 */ public static Object[] getObjectArrayFromMap(Map map, String key) { String[] keys = key.split(","); Object[] tmp = new Object[keys.length]; for (int i = 0; i < keys.length; i++) { tmp[i] = getObjectFromMap(map, keys[i].trim()); } return tmp; } }
使用Struts2,先写个XML配置Action,非常简单,如下:
- <action name="edit" class="xx.xxxx.action.UserAction"
- method="edit">
- </action>
<action name="edit" class="xx.xxxx.action.UserAction" method="edit"> </action>
在UserAction中我们使用edit()方法来处理,方法如下:
- /**
- * 个人信息修改(Jeditable实现)
- * @author Sarin
- */
- public String edit() throws Exception {
- Map parameters = getParameters();
- getServMgr().getUserService().updateUser(parameters, getLoginUserId());
- HttpServletResponse response = ServletActionContext.getResponse();
- response.setCharacterEncoding("UTF-8");
- PrintWriter out = response.getWriter();
- out.print(MapUtil.getStringFromMap(parameters, "value"));
- return null;
- }
/** * 个人信息修改(Jeditable实现) * @author Sarin */ public String edit() throws Exception { Map parameters = getParameters(); getServMgr().getUserService().updateUser(parameters, getLoginUserId()); HttpServletResponse response = ServletActionContext.getResponse(); response.setCharacterEncoding("UTF-8"); PrintWriter out = response.getWriter(); out.print(MapUtil.getStringFromMap(parameters, "value")); return null; }
因为是异步操作的方法,不需要方法有什么返回,还在当前页面操作,返回值为null就行了。这里为什么用PrintWriter向客户端输出东西呢?很简单,我们在页面输入内容之后,如果没有返回内容,那么编辑区域就会显示默认内容”Click to edit…”,这样交互显然不合适,我们需要将输入的内容返回到页面,所以调用Action之后,必须将输入的值返回,则就需要用Servlet中最原始的方法进行,这样简单。代码很好理解就不多做解释,下面看看Service的方法:
- public void updateUser(Map parameters, Integer userId) {
- StringBuffer sql = new StringBuffer("update xx_users set ");
- Object[] params = MapUtil.getObjectArrayFromMap(parameters, "id,value");
- sql.append(params[0]).append("='").append(params[1]).append("'")
- .append(" where userId=").append(userId);
- jt.update(sql.toString());
- }
public void updateUser(Map parameters, Integer userId) { StringBuffer sql = new StringBuffer("update xx_users set "); Object[] params = MapUtil.getObjectArrayFromMap(parameters, "id,value"); sql.append(params[0]).append("='").append(params[1]).append("'") .append(" where userId=").append(userId); jt.update(sql.toString()); }
Service中我们用StringBuffer来构建SQL语句,为了是拼出如下格式的语句:
- Update xx_users set ?=? where userId=?
Update xx_users set ?=? where userId=?
很显然,第一个?来自jeditable传入的id属性,第二个?是value属性,第三个?是从HttpSession中获取的用户ID。
执行之后数据就写入数据库了,而且页面也同时更新了。
欢迎交流,希望对使用者有用。
相关推荐
**jQuery.jeditable 深入解析** `jQuery.jeditable` 是一个强大且灵活的 jQuery 插件,它允许用户在页面上直接编辑文本内容,实现所谓的“就地编辑”(Edit in Place)功能。这种功能在许多现代网页应用中非常常见,...
jquery.jeditable.js开发工具 最新版,2013 1 13 更新
1. `jquery.jeditable.js`:这是`jeditable.js`的主要源代码文件,包含了插件的所有功能。 2. `jquery.jeditable.min.js`:压缩后的版本,用于生产环境以减少加载时间。 3. `demo`或`examples`目录:包含了一些示例...
jeditable.js,好用,不错,就地编辑用
Jeditable支持多种提交方式,包括`GET`和`POST`,并可以处理各种服务器响应,例如JSON、XML或简单的文本。 **PHP与MySQL数据操作** 在PHP环境中,我们通常使用MySQLi或PDO_MySQL扩展来连接和操作MySQL数据库。当...
在`examples`文件夹中,通常包含了jEditable的各种应用场景示例,包括不同类型的编辑器(文本、选择框等)、自定义回调函数以及更复杂的交互逻辑。通过查看和分析这些示例,你可以更好地理解和掌握jEditable的用法。...
jeditable插件jEditable 的自定义插件。 包含一组用于 jEditable 的额外类型。 所有 js 都可以位于 dist 文件夹中。 可用的自定义字段有: Bootstrap-timepicker - 时间选择器Bootstrap-datepicker - 日期选择器时间...
要使用jeditable,首先需要在页面中引入jQuery和jeditable的JS文件。然后,对需要编辑的表格单元格(td)应用jeditable的data属性,例如: ```html 待编辑内容 ``` 这里的`data-type`指定了编辑器的类型,如文本...
**jeditable** 是一个jQuery插件,允许用户在网页上直接编辑元素,如表格单元格。在“PHP+Ajax+Mysql+jeditable无刷新编辑表格”项目中,jeditable被用来实现表格单元格的编辑功能。当用户点击单元格进行编辑时,...
本教程主要探讨如何利用jQuery、PHP和jeditable插件实现在网页上实时编辑表格内容的功能,包括下拉菜单、日历等丰富的表单元素。以下是详细的知识点解析: 1. **jQuery**:jQuery是一个强大的JavaScript库,简化了...
jQuery可编辑的 描述 编辑就地插件(与jQuery v3.4.0 +兼容)。...使用[removed]标记从服务器加载文件dist/jquery.jeditable.min.js ,或使用。 最基本的用法 只有一个强制性参数。 浏览器发送已编辑内容的URL。 $
在JavaScript的世界里,jQuery是一个非常流行的库,它简化了DOM操作、事件处理和Ajax交互等任务,使得前端开发更为高效。本教程将聚焦于“JQuery实战——可编辑的表格”,旨在帮助初学者掌握如何利用jQuery创建交互...
此外,我们还将涉及LigerUI和jEditable两个前端库,以增强用户界面和交互性。 首先,我们需要理解Spring MVC中的Model层,通常由DAO(Data Access Object)实现,负责与数据库进行交互。在这个案例中,我们将使用...
2. **jquery.jeditable.js**:这是一个jQuery插件,名为“Jeditable”。它提供了使网页元素可编辑的能力,只需简单地点击,就能即时编辑文本、输入框、选择列表等。在jq_editor中,这个插件可能被用来实现网页上的...
3. jQuery插件:实现就地编辑,我们可以利用jQuery的插件,如`jeditable`、`jqte`等。这些插件提供了丰富的配置选项和事件处理机制,简化了开发过程。 二、jQuery就地编辑与PHP结合 1. 数据交互:前端通过jQuery...
现场是使用jEditable且兼容Rails3 +的不引人注意的javascript就地编辑插件,并且依赖jQuery。 特征 基于久经考验的jQuery插件jEditable 适用于索引页,嵌套对象,... 可以生成简单的编辑框,文本区域,下拉列表,...
- **jQueryeditable**: 与Jeditable类似,但提供更多配置选项。 - **jQueryDisableTextSelectPlugin**: 防止文本被选中,常用于防止用户复制网页内容。 - **TableEditor**: 用于表格内数据编辑的插件。 - **...
本表格用到了jquery.jeditable.js、jquery.dataTables.min.js。压缩包中含有4种表格应用示例,不过都是大同小异,实际上,它也有很多功能是靠你自定义的,这样既节省代码,又可实现你想要的功能。
本例依赖jquery库,并基于插件,...可自定义输入表单类型,目前jeditable提供text,select,textarea类型。 响应键盘的回车和ESC键。 插件机制,本例提供与jquery ui的datepicker日历控件的整合。 下面我们来一步步讲解