`

Ext + struts2的方式,如何传递数组到后台

    博客分类:
  • Ext
阅读更多
需求:
    为了很方便的批量修改数据,存在着将数据批量传递到后台的场景
1.数组的方式
    如我们一次选择了多个文件,需要将多个选择的文件的文件路径传递到后台(获取文件路径是采用applet的方式,可能是安全的原因FF中获取不到文件路径)
 
    submitFiles:function() {
        var fileNodes = Ext.query('//input[@name="files"]','inputDiv');
        var fileNames = "{";
        for (i = 0; i < fileNodes.length; i++) {
            if (i != fileNodes.length - 1)
                fileNames += "'fileNameList[" + i + "]':'" + fileNodes[i].value + "',";
            else
                fileNames += "'fileNameList[" + i + "]':'" + fileNodes[i].value + "'";
        }
        fileNames += "}";
        var submitCallback = function(jsonData){
           Global.outputInfo('info','submit success');
        }

        //replace the '\' to the '\\'
        var myPat = /%5C/g; //this is using regular expression to define the escaped version of a backslash
        fileNames = escape(fileNames);
        fileNames = fileNames.replace(myPat,"%5C%5C");
        fileNames = unescape(fileNames);
        RemoteMethods.RequestSubmitAuditTask(Ext.decode(fileNames),submitCallback,this);
    }
   

类似的html:
<div id="rowDiv_1"><input id="file_1" name="files" size="80" type="text"><input value="Search" onclick="document.FileUploadApplet.openFileDialog('file_1', 'onFileDialogFile', 'onFileDialogCancel')" type="button"><span onclick="Ext.get('rowDiv_1').remove()" style="font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; font-size: 10px; line-height: normal; font-size-adjust: none; font-stretch: normal; color: rgb(0, 0, 15); text-decoration: underline;">remove</span></div><div id="rowDiv_2"><input id="file_2" name="files" size="80" type="text"><input value="Search" onclick="document.FileUploadApplet.openFileDialog('file_2', 'onFileDialogFile', 'onFileDialogCancel')" type="button"><span onclick="Ext.get('rowDiv_2').remove()" style="font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; font-size: 10px; line-height: normal; font-size-adjust: none; font-stretch: normal; color: rgb(0, 0, 15); text-decoration: underline;">remove</span></div><div id="rowDiv_3"><input id="file_3" name="files" size="80" type="text"><input value="Search" onclick="document.FileUploadApplet.openFileDialog('file_3', 'onFileDialogFile', 'onFileDialogCancel')" type="button"><span onclick="Ext.get('rowDiv_3').remove()" style="font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; font-size: 10px; line-height: normal; font-size-adjust: none; font-stretch: normal; color: rgb(0, 0, 15); text-decoration: underline;">remove</span></div><div style="width: 100px; font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none; text-decoration: underline;" id="tipDiv">Add a New Attach</div>

后台Action中定义一个有set方法的数组,这样提交到后台之后会自动形成List如:
private java.util.List fileNameList;
....

2.json字符串的方式
还存在着这样的场景,如可编辑的EditorGridPanel,如果数据是可以修改的,那如何将修改后的数据传给后台,这里就只能传递json字符串了,然后后台手动的映射json字符串到java对象
如定义了一个Grid:
 var fm = Ext.form;
    // Column Model shortcut array
    var cols = [
    {id:'header',header: "header", width: 160, sortable: true, dataIndex: 'header',
        editor: new fm.TextField({
            allowBlank: false
        })},
    {header: "width", width: 50, sortable: true, dataIndex: 'width',
        editor: new fm.NumberField({
            allowBlank: false
        })},
    {header: "align", width: 50, sortable: true, dataIndex: 'align',
        editor: new fm.TextField({
            allowBlank: false
        })}
            ];
var gridStore = new Ext.data.JsonStore({
        fields : fields,
        url:'query_columnConfig.do?columnConfig.configType=' + config.configType +"&columnConfig.isInitConfig="+config.isInitConfig+ "&columnConfig.hidden=false",
        pruneModifiedRecords :true,
        root   : 'results'
    });
    gridStore .load();

    // create the destination Grid
    this.grid = new Ext.grid.EditorGridPanel({
        store            : gridStore,
        columns          : cols,
        enableDragDrop   : true,
        stripeRows       : true,
        trackMouseOver   :true,
        autoExpandColumn : 'header',
        sm: new Ext.grid.RowSelectionModel({}),
        title            : 'Visable Grid'
    });

当增加或者修改完多行后,提交数据到后台
saveModifiedRow:function(actionName) {
        var appendRecordStrFn = function(record) {
            record.data.indexNo = this.indexOf(record);
            //here this represent the store
            modifyRecordStr += Ext.encode(record.data) + ",";
        }
        var modifyRecordStr = "[";
        var modifiedRecords = this.grid.store.getModifiedRecords();
        Ext.each(modifiedRecords , appendRecordStrFn, this.grid.store);
        modifyRecordStr += "]";
 var returnFunction = function() {
           alert('success');
        }
        RemoteMethods.RequestColumnConfigAction(actionName, {jsonData:modifyRecordStr}, returnFunction, this);
    }

RemoteMethods:
RemoteMethods = function() {
};
RemoteMethods.prototype = {
 RequestColumnConfigAction:function(actionName,condtion, OnSuccess, scope) {
        this._invoke(actionName, condtion, OnSuccess, scope);
    },

    _invoke: function(action, paramsObj, OnSuccess, scope) {
        Ext.Ajax.timeout = 100000;
        //The timeout in milliseconds to be used for requests,when out of it deduce the error
        Ext.Ajax.request({
            url:action,
            method: 'post',
            params:paramsObj,
            scope: scope,
            callback: function(options, success, response) {
                var result = Ext.decode(response.responseText);
                if (success) {
                    if (OnSuccess) {
                        OnSuccess.call(scope, result);
                    }
                } else {
                    var msg = (result && result.Message) ? result.Message : 'Some error happend. Please try again';
                    Ext.MessageBox.alert('Error', msg);
                }
            }
        });

    }
}

后台的Action定义一个变量jsonData
 private String jsonData;
 ....
 //getter,setter方法
 ...
 public String submit(){
    JSONArray jsonArr = JSONArray.fromObject(this.jsonData);
        for (int i = 0; i < jsonArr.size(); i++) {
            JSONObject jsonObj = jsonArr.getJSONObject(i);
            JSONObject.toBean(jsonObj);
            ColumnConfig tmpColumnConfig = new ColumnConfig();
            jsonObj2JavaObj(jsonObj, tmpColumnConfig);//自动映射为java对象
            .....
        }
}

public static void jsonObj2JavaObj(JSONObject jsonObj, Object destObj) {
        Iterator itor = jsonObj.entrySet().iterator();
        while (itor.hasNext()) {
            Map.Entry entry = ((Map.Entry) (itor.next()));
            String key = entry.getKey().toString();
            Object[]  values = new Object[]{entry.getValue()};
            try {
                String method = key.replaceFirst(key.substring(0, 1), key.substring(0, 1).toUpperCase());
                Class[] parameterTypes = new Class[]{destObj.getClass().getMethod("get" + method, null).getReturnType()};
                Method obj2method = destObj.getClass().getMethod("set" + method, parameterTypes);
                if (obj2method == null)//存在源对象比目标对象的成员变量多的情况,就不处理
                    continue;
                obj2method.invoke(destObj, values);
            } catch (Exception e) {
                logger.error("", e);
            }

        }
    }



 
分享到:
评论

相关推荐

    Ext+struts+ibatis 完整项目

    【标题】"Ext+struts+ibatis 完整项目" 涉及的技术栈是Web开发中的经典组合,主要用于构建高效、可扩展的企业级应用。这个项目虽然规模不大,但包含了实现一个完整Web应用程序所需的关键组件和流程,是学习和理解这...

    ext+struts2的学生信息管理系统

    《EXT+STRUTS2构建的学生信息管理系统详解》 在当今信息化社会,高效的数据管理和信息处理是各类组织不可或缺的能力。本文将深入探讨基于EXT和STRUTS2技术框架构建的学生信息管理系统,阐述其核心功能、架构设计...

    ext+struts2

    "EXT+Struts2"是一个常见的技术组合,用于构建企业级的Web应用程序,特别是涉及到文件上传功能时。EXT是一个强大的JavaScript库,它提供了丰富的用户界面组件和交互效果,而Struts2是Java EE平台上的一个MVC框架,...

    Ext+struts学生管理系统

    【标题】"Ext+struts学生管理系统"是一个基于前端Ext框架和后端Struts框架的教育信息化管理系统。这个系统主要用于管理学生信息,实现数据的增删改查等基本功能,同时也可能包括成绩管理、课程安排等多种实用功能。...

    Ext+Struts2的学生成绩管理系统

    《基于Ext+Struts2的学生成绩管理系统详解》 在现代信息技术的推动下,教育领域的信息化管理已经成为不可或缺的一部分。学生成绩管理系统的构建,旨在提高教学管理效率,减轻教师的工作负担,为教学决策提供数据...

    Ext+struts2+spring+hibernate做的一个CRUD实例

    用EXT+struts2+spring+hibernate做的一个增删改查实例,主要用到了EXTjs里面的部分组件,用JSON与服务端交互,实现一个增删改查的功能!本地MYsql数据库,sql文件在根目录下面,建好库既可以运行!当然,还是需要在...

    EXT+STRUTS2 经典例子

    在这个“EXT+STRUTS2 经典例子”中,我们将探讨如何将两者结合,通过 JSON 方式进行通信,实现高效的数据交互。 首先,EXT(Ext JS)是一个强大的客户端 JavaScript 库,它提供了大量的 UI 组件,如表格、面板、...

    GWT+EXT+STRUTS2+Eclipse完整范例.rar

    标题 "GWT+EXT+STRUTS2+Eclipse完整范例.rar" 提示我们这是一个包含一个集成开发环境Eclipse的项目,该项目集成了Google Web Toolkit (GWT), EXT JS 和Struts2框架。描述 "整合 GWT EXT STRUTS2 Eclipse 范例" 明确...

    ext+struts+spring小例子

    这个“ext+struts+spring小例子”是一个整合这三个技术的示例项目,用于实现一个图书管理应用。下面将详细阐述这三个框架的核心概念及其在项目中的作用。 EXT JS 是一个强大的JavaScript库,主要用于构建富客户端...

    Ext+struts2项目

    在这个"Ext+struts2项目"中,我们可以看到这两个技术的集成应用。 首先,Struts2是Apache软件基金会的一个开源MVC框架,它基于Model-View-Controller(模型-视图-控制器)架构模式,为Java EE平台提供了强大的控制...

    ext+struts1.2图书管理系统

    此外,还可以学习到如何配置 Struts 的配置文件(struts-config.xml)以及EXT的配置文件,了解两者之间的数据传递方式。 通过对这个系统的学习,开发者不仅可以掌握 EXT 和 Struts1.2 的基本用法,还能深入理解如何将...

    Ext + struts2 + mysql

    一个Ext3 + struts2 + mysql的程序,主要功能是做了一个员工考勤系统,程序采用ext + action + dao的分层结构。代码大概有3000行,功能包括基本的增删改查、头像上传、分页、拦截器等功能,还用ext做了部分前台,有...

    一个ext+spring+hibernate+struts2做的系统

    标题中的“一个ext+spring+hibernate+struts2做的系统”指的是一个基于四大开源框架构建的企业级Java Web应用程序。这些框架分别是EXT JS(一个用于构建富客户端界面的JavaScript库)、Spring(一个全面的Java企业...

    ext+struts2的集成实例

    本实例主要关注"ext+struts2"的集成,这是一种常见的Java Web开发组合,其中ext是一个强大的JavaScript库,用于构建富客户端应用,而Struts2是基于MVC设计模式的Java Web框架,负责后端业务逻辑处理和页面展示的组织...

    ext+struts2整合实现登陆

    在IT行业中,Web开发是一个重要的领域,而Struts2和EXT是两个常用的技术框架。本文将详细介绍如何将它们整合以实现一个登录功能。 Struts2是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,它极大地...

    ext + struts2 例子

    在IT行业中,EXT和Struts2是两个非常重要的框架,它们分别用于构建用户界面和处理后端业务逻辑。本文将详细介绍EXT与Struts2的结合使用,并通过标题和描述中的关键词,如“树”、“gridpanel”、“分页”、“文件...

    ext+struts2+spring+hibernate 树型菜单

    "ext+Struts2+Spring+Hibernate 树型菜单"是一个典型的Java Web开发框架组合,用于创建具有树状结构的用户界面,通常用于数据的层级展示,比如部门结构、文件目录等。下面将详细解释这些技术和如何协同工作。 **...

    Ext+Struts1.2整合

    在IT行业中,"Ext+Struts1.2整合"是一个常见的Web开发技术组合,涉及到两个主要的开源框架:ExtJS(一个JavaScript库)和Struts1.2(一个Java服务器端MVC框架)。这两个框架的整合是为了解决前端用户界面的丰富性和...

    Ext+Struts2多文件上传

    它负责处理前端提交的请求,并将数据传递到后端进行处理。在文件上传场景中,Struts2提供了Action类和拦截器来接收并处理文件。 实现多文件上传的关键步骤如下: 1. **前端准备**:在ExtJS中,使用`Ext.form....

    EXT+Struts1+spring2+hibernate3学籍管理系统

    EXT+Struts1+Spring2+Hibernate3学籍管理系统是一个基于Java技术的Web应用程序,用于管理教育机构的学籍信息。这个系统的核心是利用一系列成熟的框架和技术,为数据存储、业务逻辑处理和用户界面交互提供了高效且...

Global site tag (gtag.js) - Google Analytics