大家一定会给yui-ext的EditorGrid可编辑表格吸引,但编辑后怎么提交到后台Action?我也曾经苦恼了一段时间,在http://www.jackslocum.com/forum的论坛,jack sloc说过,如果使用XMLDataModel,你在grid编辑修改后,XMLDataModel中的数据也会同时修改,只要把XMLDataModel的数据生成xml提交后台就可以了,我在项目中没有实现XMLDataModel的xml传输,没验证他的说法,因为我找不到很好的java对象转换xml格式的包,希望网友有好的包介绍一下。
而我选择了JSONDataModel,要实现把json格式提交到服务器,jack sloc提示要自己转换json数据,晕,因为要在页面使用js脚本实现转换,开始觉得很难,但实现后发现并不困难,以下介绍一下,本文有些内容是参考了http://www.rodrigodiniz.qsh.eu/YahooGrid.aspx的grid例子:
1. 把dataModel数据回填Form中的元素
例子是实现把dataModel中的一行数据自动填到form表单的元素中,也就是替代struts的<html:XXX>标签,这里要告诉大家,连jstl都不能用了,因为不用刷新页面,但还好,我还有点javas cript基础,jstl的一些功能还可以用js实现。
例子:
<form name="form1">
<input type="text" name="userId" value="">
<input type="text" name="userName" value="">
</form>
说明:随便做一个简单的form。
dataModel= new YAHOO.ext.grid.JSONDataModel(schema);
dataModel.addListener('load', onEditLoad);
dataModel.load('http://xxx/example2.do');
说明:在dataModel添加一个Listener,使用dataModel实时从后台example2.do取一个javabean对象new User(userId,userName)的数据(example2.do的实现可参考第一部分Action介绍),javabean数据返回后激活onEditLoad()方法,yui-ext使用一般使用callback得到回调数据,待会儿介绍。
function onEditLoad() {
var row = dataModel.getRows([0,0]);
var fields=dataModel.schema.fields;
for(var i=0;i< fields.length;i++){
if ($(fields[i])!= null) {
$(fields[i]).value= row[0][i];
}
}
}
说明:
因为返回是一个javabean,JSONDataModel已经转换成javas cript数组对象,所以getRows([0,0]只取第一行数据[object1,object2],object1中包括userId=XXX,object2包括userName=XXX,在schema取出与javabean对应的fields数组[userId,userName),
这里用到prototype.js,网上很容易找到,它通过$(fields[i])调用form表单中的元素,其实$(fields[i])=document.getElementById(fields[i])),通过循环就可以把dataModel数据自动填到form表单元素。
2. 页面提交表单方法一:
使用prototype.js把form元素通过Form.serialize()方法自动调交后台,Action以request.getParameter("xxx")获取数据。例子如下:
function Save(){
var callback = {
success : responseSuccess,
failure : responseFailure
};
var postData=Form.serialize($("form1"));
YAHOO.util.Connect.asyncRequest('POST', "http://xxx/example3.do", hcallback, postData);
}
var responseSuccess = function(o)
{
alert(o.responseText);
}
var responseFailure = function(o)
{
alert(o.statusText);
}
说明:建立一个callback方法,使用Yahoo UI的asyncRequest()方法post数据到action,其原理就是在链接后面加参数,象http://xxx/example3.do?userId=XXX&userName=XXX,后台action通过request.getParameter("xxx")获取数据,但缺点是要手工对建立user对象。
3. 页面提交表单方法二:使用Json数据格式提交到后台Action
1)前台js脚本例子:
function save() {
var fields=dataModel.schema.fields;
var objRet= new Object();
for(var i=0;i< fields.length;i++){
if ($(fields[i])!= null) {
objRet[fields[i]]=$(fields[i]).value;
}
var callback = {
success : responseSuccess,
failure : responseFailure
};
YAHOO.util.Connect.asyncRequest(
'POST',
'http://xxx/example3.do',
callback,
"outJSONXml=[" + YAHOO.ext.util.JSON.encode(objRet) + "]");
}
说明:通过dataModel的fields数组获取对象名,新建一个Object()对象,存放form表单中元素的value,然后通过Yahoo UI的JSON.encode()方法转换成json格式,其调交原理:
http://xxx/example3.do?outJSONXml=[---json数据格式---]
2) 后台Action(example3.do)接收json数据格式例子:
private BeanUtilsBean beanUtilsBean;
if (request.getParameter("outJSONXml")!=null) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("JSonParser",request.getParameter("outJSONXml"));
List list = JSONArray.toList( jsonObject.getJSONArray( "JSonParser" ) );
JSONDynaBean beana = (JSONDynaBean) list.get(0);
User user = new User();
beanUtilsBean.copyProperties(user,beana)
}
说明:因为JSONDynaBean对象是继承于DynaBean,所以可以通过apache的common包中的BeanUtilsBean把对象自动从JSONDynaBean拷贝到user对象,这样就省去了手工把对象逐一赋值的麻烦。
3) 关于updateManager()方法
yui-ext也提供一个updateManager方法,实现和Yahoo asyncRequest()方法一样的功能,可以实现把后台反回的信息填入一个<Div>提示用户,例子如下:
var mgr = new YAHOO.ext.UpdateManager('errorDiv');
mgr.update('http://xxx/example3.do',
"outJSONXml=[" + YAHOO.ext.util.JSON.encode(objRet) + "]", );
updateManager使用callback回调:
mgr.update({
url: 'http://xxx/example3.do',
params: "outJSONXml=[" + YAHOO.ext.util.JSON.encode(objRet) + "]",
callback: updateString,
text: 'Loading...',
timeout: 10,
s cripts: true
});
function updateString(oElement, bSuccess) {
if (bSuccess) {
alert(oElement.innerHTML);
}
}
总结:以上两部分一口气总结了我近两个星期对yui-ext在实际项目中测试应用的情况,现在我还在项目样例工程测试中,有很多细节的地方在这里没有很详细的罗列,由于yui-ext介绍的例子有限,对于前后台应用介绍很少,所以特意把经验写出来让大家少走弯路,共同研究,水平有限,请大家不要介意,请多交流指点。
分享到:
相关推荐
基于transUnet和swinUnet的医学图像分割项目实验对比,包含完整代码,可以一键运行。评估指标包括dice、iou、recall、precision等
,stm32f030无感foc方案,资料包括原理图,pcb,源程序,观测器参数,电流环参数计算表格。
分布式电源DG选址定容优化及帕累托最优解集的粒子群算法研究,多目标粒子群算法 分布式电源 DG 定容选址 网损 成本 电压偏差 通过分布式能源的选址定容确定得到帕累托最优解集,然后选择最优值进行分析,程序采用改进粒子群算法, ,核心关键词:多目标粒子群算法; 分布式电源选址定容; 网损; 成本; 电压偏差; 帕累托最优解集。,改进粒子群算法在分布式电源选址定容中的应用:优化网损与成本,考虑电压偏差
交变磁场感应材料对沥青路面温度影响的研究,交变磁场下含感应材料沥青路面温度 ,交变磁场; 感应材料; 沥青路面; 温度; 变化; 加热效率,交变磁场对含感应材料沥青路面温度的影响研究
基于Comsol模拟的三层顶板随机裂隙浆液扩散模型:考虑重力影响的瞬态扩散规律分析,Comsol模拟,考虑三层顶板包含随机裂隙的浆液扩散模型,考虑浆液重力的影响,模型采用的DFN插件建立随机裂隙,采用达西定律模块中的储水模型为控制方程,分析不同注浆压力条件下的浆液扩散规律,建立瞬态模型 ,Comsol模拟; 随机裂隙浆液扩散模型; 浆液重力影响; DFN插件; 达西定律模块储水模型; 注浆压力条件; 浆液扩散规律; 瞬态模型,Comsol浆液扩散模型:随机裂隙下考虑重力的瞬态扩散分析
对于Sqlserver数据库只是提供了简单的图形化的导出导入工具,在实际的开发和生产环境不太可能让用户在图形化的界面选择移行的对象,进行移行。 我们在数据库的移行中也遇到这种问题,需要提供一个工具给客户使用。所以我们开发了针对SQLServer数据库的cmd形式导入导出的工具。在长期的实践中不断完善,基本可以实现Oracle的导入导出工具的80%的功能,也比较的稳定。有需要的可以下载使用,也可以提供定制化的服务
内容概要:本文介绍了DeepSeek模型在不同平台上部署的方法。首先阐述了基于Ollama的本地部署,包括Ollama的安装、模型拉取以及交互模式的使用。接着讲解了DeepSeek在移动设备(iOS和Android)上的部署细节:iPhone需要通过Safari安装快捷指令,配置API Key并通过快捷指令测试运行;Android则借助Termux安装必要组件,并手动搭建Ollama环境以加载和测试模型。最后详细叙述了基于Open WebUI部署的方式,涉及Ollama、Docker Desktop及Open WebUI的安装流程及其之间的配合使用来最终达成模型的成功部署。 适用人群:面向有兴趣了解或者实际操作DeepSeek模型跨平台部署的技术开发者、研究人员以及AI爱好者。 使用场景及目标:适用于希望利用DeepSeek模型快速构建本地化应用程序、开展实验研究的用户;具体目标为掌握DeepSeek模型在桌面系统(如Linux、macOS、Windows)、iOS和Android智能手机以及云端WebUI界面上的不同部署手段和技术。 其他说明:对于每种类型的部署都提供了详细的步骤指导,旨在帮助使用者顺利完成所需工具和环境的安装,并确保模型能够正常工作。文中给出的具体链接和命令行脚本,有助于降低初次接触者的上手难度,提升部署效率和成功率。此外,还强调了一些重要的配置注意事项,例如正确输入API key以及对Ollama的初始化检查等。
,FOC 无感 混合磁链观测器 电机控制 代码 PMSM MiniDD(直驱)电机变频无感程序,包含偏心,重量,共振等感知算法,所有算法都不基于库函数,MCU底层配置完全手写
nodejs010-nodejs-cmd-shim-1.1.0-4.1.el6.centos.alt.noarch.rpm
基于S7-200 PLC的交通灯倒计时控制及组态王界面实现原理图解析,S7-200 PLC和组态王交通灯带倒计时控制 923 47 带解释的梯形图接线图原理图图纸,io分配,组态画面 ,S7-200 PLC; 交通灯; 倒计时控制; 组态王; 梯形图接线图; IO分配; 组态画面,"S7-200 PLC与组态王交通灯倒计时控制:梯形图原理及IO分配详解"
西门子四轴卧加后处理系统:828D至840D兼容,四轴联动高效加工解决方案,支持图档处理及试看程序。,西门子四轴卧加后处理,支持828D~840D系统,支持四轴联动,可制制,看清楚联系,可提供图档处理试看程序 ,核心关键词:西门子四轴卧加后处理; 828D~840D系统支持; 四轴联动; 制程; 联系; 图档处理试看程序。,西门子四轴卧加后处理程序,支持多种系统与四轴联动
FPGA篮球赛事24秒倒计时计时器设计与实现(基于Verilog与VHDLL的优化对比),基于fpga篮球倒计时24s。 verilog和vhdl两个版本 ,基于FPGA篮球倒计时24s; Verilog版本; VHDL版本,FPGA篮球比赛倒计时24秒系统:Verilog与VHDL双版本实现
论生成式AI在大学生学习中的应用与伦理问题.pdf
免费JAVA毕业设计 2024成品源码+论文+数据库+启动教程 启动教程:https://www.bilibili.com/video/BV1SzbFe7EGZ 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx
"S7-200plc与MCGS智能居家控制系统的深度融合:组态画面、IO分配与梯形图接线图原理详解",No.63 S7-200plc和 MCGS智能居家控制系统组态 带解释的梯形图接线图原理图图纸,io分配,组态画面 ,核心关键词:S7-200plc; MCGS智能居家控制系统; 梯形图接线图原理图; io分配; 组态画面。,"S7-200 PLC与MCGS智能居家系统组态及梯形图原理图解析"
方便暖通工程师及板换用户了解艾齐尔板式换热器选型计算,免费使用。
《四层三列堆垛式立体库控制系统:带解释的梯形图接线原理图及IO分配与组态画面详解》,4x3堆垛式立体库4层3列四层三列书架式立体库控制系统 带解释的梯形图接线图原理图图纸,io分配,组态画面 ,立体库; 堆垛式; 控制系统; 梯形图; 接线图; 原理图; IO分配; 组态画面,"立体库控制系统原理图:四层三列堆垛式书架的IO分配与组态画面"
免费JAVA毕业设计 2024成品源码+论文+数据库+启动教程 启动教程:https://www.bilibili.com/video/BV1SzbFe7EGZ 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx
免费JAVA毕业设计 2024成品源码+论文+数据库+启动教程 启动教程:https://www.bilibili.com/video/BV1SzbFe7EGZ 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx
免费JAVA毕业设计 2024成品源码+论文+数据库+启动教程 启动教程:https://www.bilibili.com/video/BV1SzbFe7EGZ 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx