在项目中有这样一个需要,在配置管理页面中允许用户动态添加key-value的键值对;也就是说,用户最终提交的表单中包含多少个键值对是无法预期的;这样我们就需要一个动态的表单提交的一个list对象。
前端代码如下:
<div id="frame-main"> <div id="frame-content"> <h2>国际汇款配置新增</h2> <div> <form id="configAddForm" action="$remitModule.setTarget('remitConfigAdd.htm')" method="post"> #set($f = $formManager.newForm($request)) #addFormToken($f) <div class="tb-table"> 配置项:<input type="text" id="paramKey" name="paramKey" /> <table> <thead> <tr> <th>KEY</th> <th>VALUE</th> <th>操作</th> <tr> </thead> <tbody id="config_tb"> <tr> <td> <input class="key" name="paramValue[0].key"/> </td> <td> <input class="value" name="paramValue[0].value"/> </td> <td> </td> </tr> </tbody> </table> </div> <form> </div> <div class="tb-tfoot"> <span class="btn"><input type="button" value="增 加" id="btn-add"></span> <span class="btn"><input type="button" value="提 交" id="btn-submit"></span> </div> #if($errorMsg) <div class="frame-content"> <h3>错误消息</h3> <p class="error_Msg">$!errorMsg</p> </div> #end </div> </div> <script type="text/javascript"> seajs.use("$",function(J){ J("#btn-add").click(function(e){ var _len = J("#config_tb tr").length; J("#config_tb").append("<tr id=\""+_len+"\"><td><input class=\"key\" name=\"paramValue["+_len+"].key\" /></td><td><input class=\"value\" name=\"paramValue["+_len+"].value\"/></td><td><input type=\"button\" onclick=\"deltr(event)\" value=\"删除\"/></td></tr>"); }); J("#btn-submit").click(function(e){ var allowSub = true; var _paramKey=J("#paramKey").val(); if(_paramKey==""){ alert("请正确填写配置数据"); J("#paramKey").addClass("errorText"); allowSub = false; } J("#configAddForm").submit(); }); window.deltr = function(event){ J(event.target).parents("tr").remove();//删除当前行 J("#config_tb tr").each(function(i){ J(this).find('input[name^=paramValue]').each(function(j){ J(this).attr('name', 'paramValue['+i+'].'+(j==0? "key":"value")); }) }) } }) </script>
/** * 配置表单 * @author Zhangwei * @version $Id: RemitConfigForm.java, v 0.1 2014年8月5日 下午6:01:36 Zhangwei Exp $ */ public class RemitConfigForm { private List<ParamModel> paramValue; /** * Getter method for property <tt>paramValue</tt>. * * @return property value of paramValue */ public List<ParamModel> getParamValue() { return paramValue; } /** * Setter method for property <tt>paramValue</tt>. * * @param paramValue value to be assigned to property paramValue */ public void setParamValue(List<ParamModel> paramValue) { this.paramValue = paramValue; } } /** * * @author Zhangwei * @version $Id: ParamModel.java, v 0.1 2014年8月5日 下午6:02:30 Zhangwei Exp $ */ public class ParamModel implements Serializable { /** */ private static final long serialVersionUID = 1L; private String key; private String value; /** * Getter method for property <tt>key</tt>. * * @return property value of key */ public String getKey() { return key; } /** * Setter method for property <tt>key</tt>. * * @param key value to be assigned to property key */ public void setKey(String key) { this.key = key; } /** * Getter method for property <tt>value</tt>. * * @return property value of value */ public String getValue() { return value; } /** * Setter method for property <tt>value</tt>. * * @param value value to be assigned to property value */ public void setValue(String value) { this.value = value; } /** * @see java.lang.Object#toString() */ @Override public String toString() { return "ParamModel [key=" + key + ", value=" + value + "]"; } }
@RequestMapping(value = "/remitConfigAdd.htm", method = RequestMethod.POST) @Form public String submitConfig(RemitConfigForm form) { if (logger.isInfoEnabled()) { logger.info(ToStringBuilder.reflectionToString(form)); } return RemitBusinessConstants.REMIT_CONFIG_ADD; }
结果是:
2014-08-05 18:13:32,368 [//10.64.77.25/ - /remit/remitConfigAdd.htm] INFO remit.RemitConfigController - com.alipay.overseamng.web.remit.form.RemitConfigForm@124f5739[paramValue=[com.alipay.overseamng.web.remit.model.ParamModel@16e76893, com.alipay.overseamng.web.remit.model.ParamModel@328296a4]] 2014-08-05 18:17:39,942 [//10.64.77.25/ - /remit/remitConfigAdd.htm] INFO remit.RemitConfigController - com.alipay.overseamng.web.remit.form.RemitConfigForm@149f7d63[paramValue=[ParamModel [key=aaa, value=aaaa], ParamModel [key=bbb, value=ccc], ParamModel [key=ddd, value=aaa,bbb,ccc,ddd]]] 2014-08-05 18:37:40,215 [//10.64.77.25/ - /remit/remitConfigAdd.htm] INFO remit.RemitConfigController - com.alipay.overseamng.web.remit.form.RemitConfigForm@36519d[paramValue=[ParamModel [key=aaa, value=aaaa], ParamModel [key=, value=], ParamModel [key=, value=], ParamModel [key=, value=], ParamModel [key=aa, value=bbb], ParamModel [key=, value=], ParamModel [key=, value=], ParamModel [key=, value=], ParamModel [key=, value=], ParamModel [key=, value=], ParamModel [key=, value=], ParamModel [key=, value=], ParamModel [key=, value=], ParamModel [key=, value=], ParamModel [key=, value=], ParamModel [key=, value=], ParamModel [key=, value=], ParamModel [key=, value=], ParamModel [key=, value=], ParamModel [key=, value=]]]
相关推荐
另外,Spring MVC还提供了许多其他注解,如`@RequestParam`用于从请求参数中获取值,`@ModelAttribute`用于绑定表单数据到模型对象,`@ResponseBody`用于直接将方法返回值转换为HTTP响应体等。 学习Spring时,了解...
例如,当表单提交的数据包含`username`和`password`字段时,可以在控制器方法中声明对应类型的参数,Spring MVC会自动将这些值填充到对应的参数中。 ```java @RequestMapping(value = "/login", method = Request...
当用户提交表单时,Spring MVC会自动解析这些参数并填充到User对象列表中。 标签“源码”可能意味着博客作者深入解析了Spring MVC处理这种请求的内部机制,包括ModelAttribute的工作原理以及Spring MVC如何解析请求...
在本文中,我们将深入探讨Spring MVC中的注解用法,并以文章"spring mvc 注解实现"为例进行说明。 首先,`@Controller` 是Spring MVC中定义控制器的基本注解。当标记在一个类上时,表明该类是一个处理HTTP请求的...
在Spring MVC框架中,表单提交是Web应用中常见的用户交互方式。本篇文章将深入探讨一个简单的表单提交实例,帮助开发者理解如何在Spring MVC环境中处理表单数据。 首先,我们来看User模型类,它是表单数据的载体。...
在Web开发中,Spring MVC框架为我们提供了一种高效的数据绑定机制,使得控制器(Controller)能够方便地将用户提交的表单数据与Java对象进行映射,简化了处理HTTP请求和响应的过程。本学习笔记将深入探讨Spring MVC...
在Spring MVC框架中,注解方式的使用极大地简化了Web应用程序的开发,使得开发者无需编写大量的XML配置文件,即可实现控制器、模型、视图以及数据访问的绑定。结合MyBatis,一个轻量级的持久层框架,可以构建高效、...
在Spring MVC框架中,表单验证是一个至关重要的环节,它确保了从客户端提交的数据符合预设的业务规则,从而防止因无效数据导致的错误或安全问题。Validation是Java世界中用于对象验证的标准API,通常与Hibernate ...
在Spring MVC中,M代表模型(Model),V代表视图(View),C代表控制器(Controller)。这种架构将业务逻辑、用户界面和控制流程分离,使得代码更加清晰和易于维护。 - **模型(Model)**:负责处理数据和业务逻辑...
`User`类是表单绑定的对象,用于接收表单中的数据。 #### 四、Spring控制器与标签 Spring MVC提供了丰富的控制器类和自定义标签,使得Web开发更加高效和方便。 ##### 4.1 SimpleFormController ...
Spring MVC、Spring 和 Hibernate 是Java开发中常用的三大框架,它们分别负责不同的职责,共同构建了一个高效、灵活的企业级应用架构。本教程将详细介绍如何整合这三个框架来实现一个基础的增删查改(CRUD)功能,这...
在IT行业中,Spring MVC是一个广泛使用的Java Web框架,它提供了模型-视图-控制器(MVC)模式,帮助开发者构建可维护性和可扩展性高的Web应用程序。本项目着重讲解如何在Spring MVC环境中,结合JDBC技术,实现对...
2. **后台接收**:在Spring MVC的Controller中,可以创建一个`User`类型的数组或`List<User>`来接收这些数据。例如: ```java @PostMapping("/bulkProcess") public ResponseEntity<?> processUsers(@Request...
Spring MVC还可以通过`@ModelAttribute`注解将请求参数绑定到模型属性,这在处理表单提交时非常有用。模型属性可以从请求参数、路径变量甚至其他模型属性中获取值。 6. **处理异常** 当请求参数不符合预期(如...
在这个完整的Spring MVC CRUD操作实例中,我们将深入探讨如何使用Spring MVC实现创建(Create)、读取(Retrieve)、更新(Update)和删除(Delete)数据的基本功能。 首先,让我们从项目结构开始。一个典型的Spring MVC...
在 Spring MVC 中,模型(Model)负责存储应用的数据,视图(View)用于呈现这些数据,控制器(Controller)处理用户请求并协调模型和视图。这种分层架构使得代码更易维护,职责明确,提高了开发效率。 首先,让...
在Spring MVC中,注解的使用极大地简化了配置,使得开发更加高效和简洁。下面我们将深入探讨Spring MVC中的一些关键注解及其用法。 1. `@Controller`:这个注解用于标记一个类作为Spring MVC的控制器。控制器类负责...
- 在`src/main/webapp/WEB-INF`目录下的`web.xml`文件中配置Spring MVC的DispatcherServlet。 - 示例代码: ```xml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=...
在Spring MVC框架中,数据校验是一个至关重要的环节,它确保了输入的数据符合业务规则,降低了因错误数据引发的问题。这篇博文"spring mvc校验"可能深入探讨了如何在Spring MVC项目中实现有效的数据验证。 首先,...
- **添加Spring MVC支持**:在项目设置中添加Spring MVC的支持。 - **引入依赖库**:在项目的`pom.xml`或`build.gradle`文件中引入Spring MVC及其相关依赖库。 **3. 引入依赖库** 在项目的构建脚本中添加以下...