`
这些年
  • 浏览: 405938 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Jeditable(转)

    博客分类:
  • js
 
阅读更多

Jeditable - Edit In Place Plugin For jQuery,是一款JQuery就地编辑插件。也就是在页面直接点击需要编辑的内容,就会自动变成文本框进行编辑。它的官方网站是http://www.appelsiini.net/projects/jeditable,我们可以下载JS源码,查看示例。
    示例代码比较简单,但确是PHP编写的,也没有提供出来,所以我们要探索在Java环境下进行数据操作的方式。由于一直使用Struts2作为控制器,所以便探究了在Struts2下使用Jeditable的方法。
    首先在页面引入JS文件,只有一个。也不大。代码如下:

Html代码 复制代码 收藏代码
  1. <script language="javascript" src="js/plugin/jquery_jeditable.js"></script>  
<script language="javascript" src="js/plugin/jquery_jeditable.js"></script>


    在页面中,我们有如下内容:

    代码如下:

Html代码 复制代码 收藏代码
  1. <td class="item">姓名</td><td id="realName">Sarin</td>  
<td class="item">姓名</td><td id="realName">Sarin</td>


    我们要编辑姓名,就在<td>标签上加注id属性,标识该单元。则在页面中添加如下JS代码,就可以得到编辑框的效果:

Js代码 复制代码 收藏代码
  1. $("#realName").editable("${base}/personal/edit.action?time="+new Date().getTime(), {   
  2.     indicator : "<img src='${base}/images/indicator.gif'>",   
  3.     submitdata: { _method: "post" },   
  4.     tooltip : "点击修改...",   
  5.     style : "inherit"  
  6. );  
	$("#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提供的方法我们可以看到它向后台发送了什么数据。可以使用如下代码:

Java代码 复制代码 收藏代码
  1. ActionContext.getContext().getParameters();  
ActionContext.getContext().getParameters();

打印之后    我们可以看到有id和value两个属性传回,参考jeditable的文档发现id属性就是我们要修改内容的标识符,value属性是我们输入的更新内容。这两个参数名其实是可以修改的。在JS代码中这样写就可以了:

Js代码 复制代码 收藏代码
  1. $("#realName").editable("${base}/personal/edit.action?time="+new Date().getTime(), {   
  2.     indicator : "<img src='${base}/images/indicator.gif'>",   
  3.     submitdata: { _method: "post" },   
  4.     id :"realName",   
  5.     value : "param",   
  6.     tooltip : "点击修改...",   
  7.     style : "inherit"  
  8. );  
	$("#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来进行数据库操作了。抽取如下:

Java代码 复制代码 收藏代码
  1. package xx.xxxx.util;   
  2. import java.util.*;   
  3. public class MapUtil {   
  4.     /**  
  5.      * 从Map中获取数据,能自动取得Object数组中第一项  
  6.      */  
  7.     public static Object getObjectFromMap(Map map, String key) {   
  8.         Object value = map.get(key);   
  9.         if (value != null && (value instanceof Object[])) {   
  10.             Object[] array = (Object[]) value;   
  11.             if (array != null && array.length > 0) {   
  12.                 value = array[0];   
  13.             }   
  14.         }   
  15.         return value;   
  16.     }   
  17.     /* 获取字符串 */  
  18.     public static String getStringFromMap(Map map, String key) {   
  19.         Object value = getObjectFromMap(map, key);   
  20.         if (value == null)   
  21.             return null;   
  22.         if (value instanceof String) {   
  23.             return (String) value;   
  24.         }   
  25.         return value.toString();   
  26. }   
  27.     /* 获取对象数组 */  
  28.     public static Object[] getObjectArrayFromMap(Map map, String key) {   
  29.         String[] keys = key.split(",");   
  30.         Object[] tmp = new Object[keys.length];   
  31.         for (int i = 0; i < keys.length; i++) {   
  32.             tmp[i] = getObjectFromMap(map, keys[i].trim());   
  33.         }   
  34.         return tmp;   
  35.     }   
  36. }  
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,非常简单,如下:

Xml代码 复制代码 收藏代码
  1.     <action name="edit" class="xx.xxxx.action.UserAction"  
  2.             method="edit">  
  3. </action>  
	<action name="edit" class="xx.xxxx.action.UserAction"
			method="edit">
</action>


在UserAction中我们使用edit()方法来处理,方法如下:

Java代码 复制代码 收藏代码
  1. /**  
  2.  * 个人信息修改(Jeditable实现)  
  3.  * @author Sarin  
  4.  */  
  5. public String edit() throws Exception {   
  6.     Map parameters = getParameters();   
  7.     getServMgr().getUserService().updateUser(parameters, getLoginUserId());   
  8.     HttpServletResponse response = ServletActionContext.getResponse();   
  9.     response.setCharacterEncoding("UTF-8");   
  10.     PrintWriter out = response.getWriter();   
  11.     out.print(MapUtil.getStringFromMap(parameters, "value"));   
  12.     return null;   
  13. }  
	/**
	 * 个人信息修改(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的方法:

Java代码 复制代码 收藏代码
  1.     public void updateUser(Map parameters, Integer userId) {   
  2.         StringBuffer sql = new StringBuffer("update xx_users set ");   
  3.         Object[] params = MapUtil.getObjectArrayFromMap(parameters, "id,value");   
  4.     sql.append(params[0]).append("='").append(params[1]).append("'")   
  5.                 .append(" where userId=").append(userId);   
  6.         jt.update(sql.toString());   
  7. }  
	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语句,为了是拼出如下格式的语句:

Sql代码 复制代码 收藏代码
  1. Update xx_users set ?=? where userId=?  
Update xx_users set ?=? where userId=?


    很显然,第一个?来自jeditable传入的id属性,第二个?是value属性,第三个?是从HttpSession中获取的用户ID。
    执行之后数据就写入数据库了,而且页面也同时更新了。
    欢迎交流,希望对使用者有用。

  • 大小: 9.2 KB
  • 大小: 5.3 KB
分享到:
评论

相关推荐

    php点击修改jeditable插件

    Jeditable支持多种提交方式,包括`GET`和`POST`,并可以处理各种服务器响应,例如JSON、XML或简单的文本。 **PHP与MySQL数据操作** 在PHP环境中,我们通常使用MySQLi或PDO_MySQL扩展来连接和操作MySQL数据库。当...

    可编辑的表格:jQuery+PHP+jeditable实现实时编辑表格字段内容,下拉、日历等多种表单演示

    本教程主要探讨如何利用jQuery、PHP和jeditable插件实现在网页上实时编辑表格内容的功能,包括下拉菜单、日历等丰富的表单元素。以下是详细的知识点解析: 1. **jQuery**:jQuery是一个强大的JavaScript库,简化了...

    jQuery列表 欢迎下载

    - **jQueryeditable**: 与Jeditable类似,但提供更多配置选项。 - **jQueryDisableTextSelectPlugin**: 防止文本被选中,常用于防止用户复制网页内容。 - **TableEditor**: 用于表格内数据编辑的插件。 - **...

    HybridEnergyFarms是一个展示海洋电池技术与可再生能源的工具包,集成模型包括评估LCOE和LCOG的功率模型(Simulink)和成本模型(MATLAB)。.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    2025年自动化仪表创业项目方案.docx

    2025年自动化仪表创业项目方案.docx

    cmd-bat-批处理-脚本-Messagebox_Cancel_TryAgain_Ignore.zip

    cmd-bat-批处理-脚本-Messagebox_Cancel_TryAgain_Ignore.zip

    cmd-bat-批处理-脚本-GenerateUnionWinMD.zip

    cmd-bat-批处理-脚本-GenerateUnionWinMD.zip

    cmd-bat-批处理-脚本-shift.zip

    cmd-bat-批处理-脚本-shift.zip

    基于MATLAB的电力系统潮流计算完整程序

    电力系统潮流计算是电力工程领域的一项核心技术,主要用于分析电力网络在稳态运行条件下的电压、电流、功率分布等运行状态。MATLAB凭借其强大的数值计算功能和便捷的编程环境,成为电力系统潮流计算的重要工具,它提供了丰富的数学函数库,能够高效地处理复杂的电力系统计算任务。 本压缩包中的“潮流计算MATLAB程序”是一套完整的电力系统潮流计算解决方案,主要包括以下几个关键部分: 数据输入模块:该模块负责读取电力系统的网络数据,包括发电机、线路、变压器等设备的参数。这些数据通常来源于IEEE测试系统或实际电网,并以特定格式存储。 网络建模:基于输入数据,程序构建电力系统的数学模型,主要涉及节点功率平衡方程的建立。每个节点的注入功率等于其消耗功率,对于发电机节点还需考虑其有功和无功功率的调节能力。 迭代算法:潮流计算的核心是求解非线性方程组,常见的算法有牛顿-拉夫森法和高斯-塞德尔法。MATLAB的优化工具箱可辅助实现这些算法,通过迭代更新节点电压和支路电流,直至满足收敛条件。 结果输出:计算完成后,程序能够输出关键性能指标,如节点电压幅值和相角、支路功率流、发电机的有功无功功率等。这些信息对于分析电网运行状态和制定调度策略具有重要意义。 可视化功能:程序可能包含图形用户界面(GUI),用于展示计算结果,例如绘制网络拓扑图并标注节点电压和支路功率,便于用户直观理解计算结果。 错误处理与调试:良好的程序设计应包含错误检测和处理机制,以应对不合理数据或计算过程中出现的问题,并给出适当的提示。 对于电力系统分析课程的学生来说,这个MATLAB程序是一个宝贵的学习资源。它不仅有助于学生掌握电力系统的理论知识,还能让他们了解如何将理论应用于实践,通过MATLAB解决实际问题。尽管该程序是作者一周内完成的,可能存在一些未完善之处,但使用者可以在参考的基础上逐步改进和完善,使其更贴合自身需求。 总之

    cmd-bat-批处理-脚本-updaterjs.zip

    cmd-bat-批处理-脚本-updaterjs.zip

    cmd-bat-批处理-脚本-fsharp.zip

    cmd-bat-批处理-脚本-fsharp.zip

    电力系统双馈感应发电机频率耦合特性建模与稳定性分析:风电系统次同步振荡风险评估及控制策略设计(含详细代码及解释)

    内容概要:该论文深入研究了双馈感应发电机(DFIG)的频率耦合特性及其对系统稳定性的影响。传统阻抗分析方法将DFIG系统解耦为正序和负序子系统进行分析,但当系统中存在频率耦合时,这种线性假设可能导致错误的稳定性结论。论文重点分析了由PLL(锁相环)和不对称转子电流控制引起的频率耦合现象,建立了描述DFIG频率耦合特性的解析模型,并通过仿真验证了模型的有效性。基于该模型,论文进一步分析了系统稳定性及频率耦合的影响因素,表明阻抗分析方法相比传统特征值分析方法更具优势,即使无法建立解析模型,也可通过实验或仿真获得阻抗模型。此外,论文提供了详细的Python代码实现,包括DFIG参数定义、阻抗模型构建、稳定性分析及可视化结果。 适合人群:电力系统工程师、风电系统研究人员、高校电气工程专业师生等具有电力系统基础知识和一定编程能力的专业人士。 使用场景及目标:①用于理解和研究DFIG系统在风电场中的频率耦合特性;②帮助工程师和研究人员分析DFIG系统的稳定性,识别潜在的次同步振荡风险;③为实际风电系统的稳定性评估和优化提供理论依据和技术支持。 其他说明:该论文不仅提供了理论分析,还通过Python代码实现了完整的DFIG频率耦合建模和稳定性分析流程。

    2025年职称计算机考试理论模拟试题及答案.docx

    2025年职称计算机考试理论模拟试题及答案.docx

    《CMU统计学课程1 - 10章课后习题答案整理》

    《全统计:CMU课程1-10章课后答案详解》是一份极具价值的学习资料,专为卡内基梅隆大学(CMU)“全统计”课程的前10章课后习题提供详尽的解题指导。该压缩包内含10个PDF文件,每个文件对应一章的详细解答,目的是助力学生深刻领会统计学的基础知识、核心理论与实际应用。 在第一章中,通常会讲解统计学的基本概念,例如样本与总体、参数估计、概率分布等。答案详解会涵盖如何计算平均值、中位数、众数,以及如何分析这些统计量之间的差异。同时,还会介绍随机变量和概率分布,如二项分布、正态分布等内容。 第二章主要涉及抽样分布理论,包括中心极限定理,这是统计推断的关键基础。答案详解会说明如何借助抽样分布开展假设检验,例如t检验和z检验。 第三章则深入探讨置信区间的构建以及假设检验的方法。答案详解会详细阐述如何确定置信水平,以及在不同情境下如何选择单尾或双尾检验。 第四章通常聚焦于线性回归模型,包括回归方程的建立、残差分析以及多重共线性问题。答案详解会展示如何解读回归系数,预测未知变量,并解释相关性的强度和方向。 第五章可能探讨非参数统计方法,这些方法不依赖于特定的分布假设,例如Kolmogorov-Smirnov检验、Mann-Whitney U检验等。答案详解会解释在数据分布未知时如何开展统计分析。 第六章将涉及单因素和多因素方差分析(ANOVA),用于比较不同组间的均值差异。答案详解会详细说明如何执行ANOVA,解释F统计量及其意义。 第七章可能涵盖实验设计的基本原则,包括随机化、复制和控制。答案详解会说明如何设计有效的实验以减少偏差,以及如何分析实验结果。 第八章可能涉及时间序列数据的特性,如趋势、季节性和周期性。答案详解会介绍ARIMA模型、自回归移动平均模型等,并解释如何预测未来趋势。 第九章可能深入到多元统计领域,包括多元线性回归、主成分分析、因子分析等。答案详解会介绍如何处理多维

    MATLAB实现激光谐振腔自再现模的Fox-Li迭代算法仿真

    提供一份MATLAB代码,采用Fox-Li迭代算法,只需复制粘贴到MATLAB软件中即可直接运行,非常便捷且精准。

    cmd-bat-批处理-脚本-register_python.zip

    cmd-bat-批处理-脚本-register_python.zip

    cmd-bat-批处理-脚本-GetOSVersion.zip

    cmd-bat-批处理-脚本-GetOSVersion.zip

    基于GAN的视景图像超分辨率重 建方法研究.zip

    基于GAN的视景图像超分辨率重 建方法研究.zip

    MATLAB环境下极化码SC与SCL译码仿真研究

    极化码(Polar Code)是由土耳其科学家Erdal Arıkan在2009年提出的一种新型纠错编码技术。它通过利用信道的极化现象,将虚拟信道分为误码率接近0和接近1/2的两类。在编码设计中,数据被放置在误码率极低的信道上,从而实现高效的数据传输。极化码的主要优势在于其理论编码容量能够达到香农限,并且构造方法较为简单。 MATLAB是一种功能强大的数学计算和编程工具,广泛应用于科学研究和工程领域。在极化码的研究中,MATLAB可用于构建编码和解码算法,模拟数据在不同信道条件下的传输效果,验证理论性能,并优化相关参数。 SC(Successive Cancellation,逐位取消)译码是极化码的基本解码方法。它从最可靠的比特开始,依次解码每个虚拟信道,且每个比特的解码结果会影响后续比特的解码,因为它们之间存在依赖关系。虽然SC译码的实现较为简单,但其计算复杂度较高,随着码长的增加,解码时间会线性增长。 SCL(Successive Cancellation List,逐位取消列表)译码是SC译码的改进版本。它通过引入列表机制,同时处理多个路径,从而增强了错误校正能力,并在一定程度上降低了错误率。与SC译码相比,SCL译码虽然需要消耗更多的计算资源,但能够提供更好的性能。 一个完整的MATLAB仿真资源通常包含以下内容: 编码模块:用于实现极化码的生成,包括码字构造和极化矩阵操作等。 信道模型:用于模拟各种通信信道,例如AWGN(加性高斯白噪声)信道或衰落信道。 SC/SCL译码模块:包含SC译码和SCL译码的算法实现。 误码率(BER)计算:通过比较发送和接收的码字,计算误码率,以评估编码性能。 性能曲线绘制:绘制误码率与信噪比(SNR)之间的关系曲线,展示不同译码策略的性能差异。 使用说明:指导用户如何运行仿真,理解代码结构,以及如何调整参数以进行自定义实验。 代码注

    postgresql-16.9-1-windows-x64 版本官网下载安装文件

    postgresql-16.9-1-windows-x64 版本官网下载安装文件

Global site tag (gtag.js) - Google Analytics