`
liyixing1
  • 浏览: 958815 次
  • 性别: Icon_minigender_1
  • 来自: 江西上饶
社区版块
存档分类
最新评论

MultiForm表单后台处理方式

 
阅读更多
首先确定下的是MultiForm的表单命名是FieldName + _o_数字


后台在处理改类型的Form的时候,一般会进行如下代码
UtilHttp
.parseMultiFormData(UtilHttp.getParameterMap(request));
UtilHttp.getParameterMap(request)这里不是重点,这里只是将请求参数转换成需要的Map格式,重要看parseMultiFormData,它是处理MultiForm表单请求数据的。
进入

public static Collection<Map<String, Object>> parseMultiFormData(Map<String, Object> parameters) {
//rows,请求参数中哪些参数会被保留由它决定
        FastMap<Integer, Map<String, Object>> rows = FastMap.newInstance(); // stores the rows keyed by row number

        //开始处理每个参数
        for (String key: parameters.keySet()) {
            //这里key==null不用看就知道,key.length() <= ROW_SUBMIT_PREFIX_LENGTH这里的ROW_SUBMIT_PREFIX_LENGTH值是13,为神马是13呢?这是因为它将_rowSubmit_o_开头的参数作为判断该请求参数是否有效,如_rowSubmit_o_1=Y,那么所有FieldName + _o_1的参数都是有效地。_rowSubmit_o_是13个字符。
            if (key == null || key.length() <= ROW_SUBMIT_PREFIX_LENGTH) continue;
//检查是否存在MULTI_ROW_DELIMITER(_o_)
            if (key.indexOf(MULTI_ROW_DELIMITER) <= 0) continue;
            if (!key.substring(0, ROW_SUBMIT_PREFIX_LENGTH).equals(ROW_SUBMIT_PREFIX)) continue;
//检查值是否Y
            if (!parameters.get(key).equals("Y")) continue;

//计算出它的数字
            // decode the value of N and create a new map for it
            Integer n = Integer.decode(key.substring(ROW_SUBMIT_PREFIX_LENGTH, key.length()));
            Map<String, Object> m = FastMap.newInstance();
//得出所有有效地数字。
//这里我们还可以知道通过row可以取出数字
            m.put("row", n); // special "row" = N tuple
            rows.put(n, m); // key it to N
        }

        // 只保留有效地参数
        for (String key: parameters.keySet()) {
            // skip keys without DELIMITER and skip ROW_SUBMIT_PREFIX
            if (key == null) continue;
            int index = key.indexOf(MULTI_ROW_DELIMITER);
            if (index <= 0) continue;
            if (key.length() > ROW_SUBMIT_PREFIX_LENGTH && key.substring(0, ROW_SUBMIT_PREFIX_LENGTH).equals(ROW_SUBMIT_PREFIX)) continue;

            // get the map with index N
            Integer n = Integer.decode(key.substring(index + MULTI_ROW_DELIMITER_LENGTH, key.length())); // N from ${param}${DELIMITER}${N}
            Map<String, Object> map = rows.get(n);
            if (map == null) continue;

            // 这里最后得到的是哪些数字是有效地,这些数字有哪些参数。
            String newKey = key.substring(0, index);
            map.put(newKey, parameters.get(key));
        }
        // return only the values, which is the list of maps
        return rows.values();
    }
分享到:
评论

相关推荐

    Multiform:简单的 jquery 脚本,只需一次推送即可在一页中生成独特的表单

    **Multiform:jQuery脚本实现页面内多形式切换** 标题中的"Multiform"是一个基于jQuery的脚本,它允许开发者在同一个网页上创建...理解其工作原理和使用方式,能够有效优化网站的表单管理部分,提供更流畅的用户体验。

    album-3D-Multiform.zip

    通过头戴式显示器和交互设备,用户可以沉浸在由3D模型构建的虚拟世界中,为教育、娱乐等领域提供了全新的体验方式。 总的来说,“album-3D-Multiform.zip”专辑展示了3D设计的多面性,不仅涵盖了基础的技术知识,也...

    Oracle EBS工具选项:关闭其他表单修改方法

    具体步骤是:进入“功能”(Function)菜单,找到“Navigator: Disable Multiform”,如果想要关闭“关闭其他表单”功能,将该功能添加到菜单排除项中;反之,如果想要开启,移除这个排除项。 2. **通过SQL语句永久...

    ActionForm属性中存在对象数组如何处理

    当ActionForm中的属性涉及到对象数组时,处理方式就变得稍微复杂一些。以下将详细介绍如何处理ActionForm属性中存在对象数组的情况。 首先,我们需要创建一个实体类(Entity),例如`Student`,它包含一些基本属性...

    Multiform-开源

    Multiform的Javascript框架可能集成了流行的前端库如jQuery或React,以提供强大的DOM操作和事件处理能力。同时,XSL编译器则将XML定义转换为实际的HTML和CSS,这使得开发者可以通过XML模板来设计用户界面,而无需...

    MultiForm-react:React JS中的多表单应用程序

    该项目是通过引导的。 可用脚本 在项目目录中,可以运行: npm start 在开发模式下运行该应用程序。 打开在浏览器中查看它。 如果您进行编辑,则页面将重新加载。 您还将在控制台中看到任何棉绒错误。...

    Python代码源码-实操案例-框架案例-如何解决WTForms导致的 ID冲突问题.zip

    在Python web开发中,WTForms是一个非常常用的表单处理库,它提供了强大的验证和渲染功能。然而,在实际项目中,可能会遇到一个常见的问题:ID冲突。这个问题通常发生在多个相同表单或者动态生成的表单中,导致前端...

    material-ui-multiform:使用 Material-ui 和 React 实现的多表单

    这个项目是用引导的。可用脚本在项目目录中,您可以运行:npm start 在开发模式下运行应用程序。 打开在浏览器中查看。 如果您进行编辑,页面将重新加载。 您还将在控制台中看到任何 lint 错误。...

    multiform-template

    基础模板可能不包含复杂的依赖管理和构建工具,而是专注于展示最核心的 JavaScript 代码编写和组织方式。 更进一步,该项目可能在其他分支中添加了代码质量检查工具,例如 ESLint,用于检测并防止编程错误和不符合...

    multiform:使用针对不同 V8 版本优化的多个构建在 ES67 中编写 NPM 模块

    多种形式 ... multiform命令(安装为 devDependency、 并在 prepublish 上运行)将您的src文件夹构建到dist-0 、 dist-1等中,与您的 Babel 配置相对应。 您的主脚本会自动选择并加载当前 V8 版本

    Stratification of pseudoprogression and true progression of glioblastoma multiform based on longitudinal diffusion tensor imaging without segmentation

    Stratification of pseudoprogression and true progression of glioblastoma multiform based on longitudinal diffusion tensor imaging without segmentation

    用Struts向MySQL中储存图片

    这不仅包括前端表单的设计、后端逻辑处理,还包括与数据库交互的具体实现。以下是详细的步骤: #### 1. 数据库准备 首先,我们需要在MySQL中创建一个表用于存储图片数据。该表应包含至少两个字段:`name`(用于存储...

    jquery添加表格行

    在JavaScript的世界里,jQuery是一个非常流行的库,它简化了DOM操作、事件处理和Ajax交互等任务。本主题将深入探讨如何使用jQuery来实现表格行的动态添加和删除,这对于创建数据密集型应用或者需要用户输入多条信息...

    programming in visual c#

    5. Multiform Projects(多窗体项目):在应用程序中,经常需要同时操作多个窗体或用户界面,比如一个主窗体和多个子窗体。如何设计和管理这些窗体,以及它们之间的数据传递和交互是多窗体项目要解决的问题。 6. ...

    M4MContactManagerExample

    Swing Contact Manager A simple Swing application for managing a personal contact list. The multiform UI was created and can be edited using Matisse4MyEclipse.

    Planning on soil utilization for the Coastal Mekong River Delta, Viet Nam in period 2005 - 2010

    Planning on soil utilization for the Coastal Mekong River Delta, Viet Nam in period 2005-2010,TRAN THAI... Ben Tre, Tra Vinh, Soc Trang, Bac Lieu, Ca Mau and Kien Giang, it is the multiform ecology with

    Influence of the net gain on characteristic of stochastic resonance in a single-mode laser system

    When the net gain a0 changes, it is found that, 1) the shape of the curve of the signal-to-noise ratio (SNR) versus the pump noise self-correlation time \tau exhibits a changing process of multiform ...

    .NET移动通信程序设计.rar

    3.3 处理事件... 25 3.3.1 建立预定事件. 25 IV .NET移动通信程序设计 3.3.2 建立非预定事件... 26 3.4 使用不同的浏览器...... 27 第 4 章程序调试 29 第5 章 cookies... 32 第6 章窗体控件 35 第7 章 Web ...

    get-gh-contributors:从github获取并服务我们的用户和贡献者数据

    get-gh-贡献者从github获取并服务我们的用户和贡献者数据安装&gt; npm install用法&gt; node src/fetch.js# will create a folder named data原料药&gt; npm start# starts an API on port 9090... 其他选项: ipld , multiform

Global site tag (gtag.js) - Google Analytics