`
zengbo0710
  • 浏览: 414654 次
社区版块
存档分类
最新评论

初步搭建yui-ext(Ajax)的开发环境(第二部分:前台->后台数据交换)

阅读更多

大家一定会给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介绍的例子有限,对于前后台应用介绍很少,所以特意把经验写出来让大家少走弯路,共同研究,水平有限,请大家不要介意,请多交流指点。 



分享到:
评论
1 楼 tommy_kin 2007-06-21  
谢谢兄弟,帮了我很大的忙

相关推荐

    YUI-EXT使用详解

    3. **数据绑定(Data Binding)**:YUI-EXT支持数据绑定,允许UI组件与后台数据模型直接关联。当数据模型发生变化时,UI会自动更新,反之亦然。这极大地简化了数据驱动的界面开发。 4. **表单(Forms)**:YUI-EXT...

    YUI-EXT

    YUI-EXT开发学习帮助手册,自己收集网上资料整理的。

    YUI-ajax框架开发文档

    在"YUI-ajax框架开发文档"中,我们可以深入探讨YUI如何通过其Ajax组件实现异步数据通信。 YUI中的Ajax框架主要由`YAHOO.util.Connect`和`YAHOO.widget.DataSource`两个关键部分组成。`YAHOO.util.Connect`是YUI的...

    yuicompressor-maven-plugin

    3. **部署策略**:在生产环境中,使用压缩过的文件,而在开发环境中使用原始文件,便于调试。 4. **测试**:在部署前进行充分测试,确认压缩后的文件不会影响功能。 总之,`yuicompressor-maven-plugin`为Maven项目...

    YUI-EXT教材及实例

    我们将讲讲怎么使用Ext,来完成一些JavaScript常见的任务.这是关于Ext的入门教程。

    yui-yuidoc-yuidoc-50-529-gc631758

    【标题】"yui-yuidoc-yuidoc-50-529-gc631758" 指向的是一个关于 Yahoo User Interface Library (YUI) 和 YUIDoc 的特定版本或修订版。YUI 是一个开源的 JavaScript 库,提供了一系列模块化的工具,用于构建富有交互...

    Ajax(yui-slideshow)

    它通过在后台与服务器进行少量数据交换,使得网页实现异步更新,提升了用户体验。YUI(Yahoo! User Interface Library)是雅虎推出的一个开源JavaScript库,提供了丰富的功能,包括CSS样式、动画效果、事件处理以及...

    Professional JavaScript Frameworks Prototype, YUI, Ext JS, Dojo and MooTools.pdf

    - **第二部分:Yahoo! User Interface Library (YUI)** - **第7章:使用YUI遍历和操作DOM** 介绍如何使用YUI库来高效地遍历和操作DOM树。 - **第8章:处理跨浏览器事件** 继续讨论跨浏览器兼容性的事件处理...

    yuicompressor-yui compressor

    C:\java -jar yuicompressor-2.4.2.jar editor.js -o editor2.js 参数说明: yuicompressor-2.4.2.jar 为工具包jar editor.js为要压缩的js -o editor2.js为压缩完成后的文件名 压缩率: 对resources下js...

    yuicompressor-2.4.8.jar

    -type js --charset utf-8 -v src.js &gt; packed.js //压缩CSS java -jar yuicompressor-2.4.2.jar --type css --charset utf-8 -v src.css &gt; packed.css 语法: java -jar yuicompressor-x.y.z.jar [options] [input ...

    yui的扩展ext.rar

    《深入理解YUI扩展EXT——构建高效前端UI与Ajax应用》 YUI(Yahoo! User Interface Library)是由雅虎公司开发的一套开源JavaScript库,它为开发者提供了丰富的UI组件和功能,以帮助创建高性能、易用的Web应用程序...

    grunt-yui-compressor-源码.rar

    《grunt-yui-compressor:JavaScript与CSS压缩利器的源码解析》 在Web开发中,优化资源加载速度是提升用户体验的重要一环。压缩JavaScript和CSS文件可以显著减少页面加载时间,"grunt-yui-compressor"就是一个这样...

    前端开源库-yui-compressor

    在现代开发环境中,通常使用npm(Node.js包管理器)来安装YUI Compressor。以下是在命令行中安装的步骤: ```bash npm install yui-compressor ``` 安装完成后,可以使用以下命令对JavaScript或CSS文件进行压缩: ...

    学习YUI.Ext 第六天--关于树TreePanel(Part 1)

    在本文中,我们将深入探讨YUI.Ext库中的一个重要组件——TreePanel。TreePanel是一个用于构建交互式树形结构视图的组件,它在YUI.Ext 0.40版本中首次引入。尽管YUI自身已经提供了TREE VIEW组件,但开发者Jack Slocum...

    yui.zip_YUI aj_ajax_ajax java_javascript_javascript YUI Ajax

    5. **connection**:AJAX连接模块,是实现异步数据交换的核心部分,允许在后台与服务器通信而无需刷新页面。 6. **calendar**:日历组件,为Web应用提供日期选择功能。 7. **dragdrop**:拖放模块,让用户能够通过...

    基于J2EE的Ajax宝典

    在J2EE(Java 2 Enterprise Edition)环境中,Ajax的应用极大地提升了用户体验,因为它允许后台与服务器进行异步数据交换,而用户界面仍然保持交互性和响应性。本资料《基于J2EE的Ajax宝典》旨在通过实例深入浅出地...

    extjs-ajax

    ### ExtJS-Ajax 相关知识点详解 #### 一、ExtJS 概述 ##### 1.1 架构特点 - **定义**: ExtJS 是一个功能强大的客户端 JavaScript 库,用于构建现代化、响应迅速的 Web 应用。它不仅支持 AJAX 技术,还能实现丰富的...

Global site tag (gtag.js) - Google Analytics