Spring MVC是Spring Framework的一部分,其主要目的是使Web开发更加简单,便捷和轻松。 与表单的交互是或多或少现代Web应用程序的一部分。 Spring MVC允许您以非常严格和简单的方式执行各种形式的活动。 在本文中,您将在Spring MVC的帮助下阅读表单处理的基础知识。

我将使用与Spring MVC相关的以前的教程之一作为以下示例的基础。 我更喜欢基于Java的配置,因此不要惊讶,在本教程中您还将看到它们。 让我们转到本节,我将指出这篇文章的主要目的。

Spring表单处理教程:

  • 复选框
  • 选框
  • 单选按钮
  • 下拉列表

主要目标

我将向您展示如何在Spring MVC的帮助下处理表单,如何将域模型与表单绑定,如何处理表单数据并在视图中表示它。

发展历程

我们的项目将基于Dynamic Web Project和Maven。 我建议使用这套传统工具进行专业软件开发。 第一步将参考本文前面提到的帖子。 我的意思是在Eclipse中创建项目并将其转换为Maven项目。 此外,我将向您演示完成示例所需的所有必需文件。

pom.xml看起来像:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelversion>4.0.0</modelversion><groupid>EduSprMvc</groupid><artifactid>EduSprMvc</artifactid><version>0.0.1-SNAPSHOT</version><packaging>war</packaging><properties><spring.version>3.1.1.RELEASE</spring.version></properties><dependencies><!-- Spring --><dependency><groupid>org.springframework</groupid><artifactid>spring-context</artifactid><version>${spring.version}</version></dependency><dependency><groupid>org.springframework</groupid><artifactid>spring-webmvc</artifactid><version>${spring.version}</version></dependency><dependency><groupid>org.springframework</groupid><artifactid>spring-beans</artifactid><version>${spring.version}</version></dependency><dependency><groupid>org.springframework</groupid><artifactid>spring-web</artifactid><version>${spring.version}</version></dependency><!-- CGLIB is required to process @Configuration classes --><dependency><groupid>cglib</groupid><artifactid>cglib</artifactid><version>2.2.2</version></dependency><!-- Servlet API, JSTL --><dependency><groupid>javax.servlet</groupid><artifactid>javax.servlet-api</artifactid><version>3.0.1</version><scope>provided</scope></dependency><dependency><groupid>jstl</groupid><artifactid>jstl</artifactid><version>1.2</version></dependency></dependencies><build><plugins><plugin><artifactid>maven-compiler-plugin</artifactid><version>2.3.2</version><configuration><source>1.7<target>1.7</target></configuration></plugin></plugins></build></project>

声明所有依赖项后,我们可以继续进行项目配置。 如前所述,我将使用基于注释的配置或许多人喜欢将其称为“程序化配置方法”。 如果您想避免大量的xml编码,这非常方便。

WebAppConfig.java

package com.sprmvc.init;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.view.JstlView;
import org.springframework.web.servlet.view.UrlBasedViewResolver;@Configuration
@ComponentScan("com.sprmvc")
@EnableWebMvc
public class WebAppConfig {@Beanpublic UrlBasedViewResolver setupViewResolver() {UrlBasedViewResolver resolver = new UrlBasedViewResolver();resolver.setPrefix("/WEB-INF/pages/");resolver.setSuffix(".jsp");resolver.setViewClass(JstlView.class);return resolver;}
}

初始化器

package com.sprmvc.init;import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration.Dynamic;import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;public class Initializer implements WebApplicationInitializer {@Overridepublic void onStartup(ServletContext servletContext) throws ServletException {AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();ctx.register(WebAppConfig.class);ctx.setServletContext(servletContext);    Dynamic servlet = servletContext.addServlet("dispatcher", new DispatcherServlet(ctx));servlet.addMapping("/");servlet.setLoadOnStartup(1);}
}

接下来,我将创建一个类,该类将表示与Web表单绑定的数据模型。 这是重要的一步,因为在示例中,我将不使用简单的html表单标签,而是使用Spring表单标签库。

package com.sprmvc.bean;public class Person {private String firstName;private Integer age;public String getFirstName() {return firstName;}public void setFirstName(String firstName) {this.firstName = firstName;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}
}

请注意,Person类仅包含具有专用访问修饰符和每个字段的getter / setter方法的字段。 getter / setter是必需的,因为Spring表单标签使用它们与视图层中的对象字段进行交互。 本教程的主要部分隐含了控制器和视图的开发。 因此,让我们继续。

package com.sprmvc.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;import com.sprmvc.bean.Person;@Controller
public class PersonController {@RequestMapping(value="/person-form")public ModelAndView personPage() {return new ModelAndView("person-page", "person-entity", new Person());}@RequestMapping(value="/process-person")public ModelAndView processPerson(@ModelAttribute Person person) {ModelAndView modelAndView = new ModelAndView();modelAndView.setViewName("person-result-page");modelAndView.addObject("pers", person);return modelAndView;}
}

控制器personPage()中的第一个方法负责导航到带有表单的页面。 注意,方法的返回包含Person()类。 表单与域模型的正确绑定是必需的。
现在,让我们继续进入“人员表单”页面的概述:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"pageEncoding="ISO-8859-1"%>
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
...
<h1>Person page</h1>
<p>This is Person page</p>
<form:form method="POST" commandname="person-entity" action="process-person.html">
<table><tbody><tr><td><form:label path="firstName">Name:</form:label></td><td><form:input path="firstName"></form:input></td></tr><tr><td><form:label path="age">Age:</form:label></td><td><form:input path="age"></form:input></td></tr><tr><td colspan="2"><input value="Submit" type="submit"></td><td></td><td></td></tr>
</tbody></table>
</form:form>
...

在这里,我想强调两个宝贵的时刻。 首先是spring表单标签库的导入。 第二个参数是commandName =“ person-entity”。 它的值等于控制器第一种方法中返回参数的值。 请注意,表单中的所有标签均包含与Person类字段完全对应的路径值。 让我们回到第二种方法processPerson(@ModelAttribute Person person) 。 在此方法中,我想强调以下几点:

  • 该方法获取带有@ModelAttribute注释的参数Person对象 。 注释定义方法的参数(Person person)将引用从表单传递的适当属性。
  • @RequestMapping(value =” / process-person”)包含将由该方法处理的URL的值。 我在person-page.jsp中定义的值相同; 我的意思是表单的属性action =” process-person.html”
  • 我已经指定了要传递给modelAndView对象的person对象的名称。 vname是“ pers”。 我将在person-result.page.jsp中使用此名称来调用我需要的参数。
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"pageEncoding="ISO-8859-1"%>
...
<h1>Person Result page</h1>
<p>Student's name is ${pers.firstName}. The age is ${pers.age}.
...
</p>

这里的一切都很简单。 我使用一种表达语言来访问person对象的所有所需值,该值是在控制器的第二种方法处理请求之后获得的。 结果,我得到了这样的项目结构:

摘要

在本教程中,您已经了解了如何使用Spring MVC处理表单。 并非所有可能的方式都可以做到。 在以后的课程中,我将演示表单处理的其他变体。 您可以在下面看到工作的结果:

您可以从我的DropBox 下载此项目。

参考: Spring MVC:表单处理卷。 Fruzenshtein的笔记博客中来自JCG合作伙伴 Alexey Zvolinskiy的1 。

翻译自: https://www.javacodegeeks.com/2013/04/spring-mvc-form-handling-vol-1.html

Spring MVC:表单处理卷。 1个相关推荐

  1. Spring MVC表单防重复提交

    转载自 Spring MVC表单防重复提交 利用Spring MVC的过滤器及token传递验证来实现表单防重复提交. 创建注解 @Target(ElementType.METHOD) @Retent ...

  2. Spring MVC表单验证(带批注)

    这篇文章提供了一个简单HTML表单验证示例. 它基于带有注释的Spring MVC示例. 该代码可在GitHub的Spring-MVC-Form-Validation目录中找到. 数据 在此示例中,我 ...

  3. SSM框架笔记14:Spring MVC表单验证

    Spring MVC表单验证   在Spring MVC中,表单验证有三种方法.   一.基本校验 这种方法是基于handler的,优点是定义方便,缺点是不便于复用. 1.两个接口:Errors/Bi ...

  4. Spring MVC表单教程

    本教程将展示如何在Spring MVC中处理表单提交. 我们将定义一个控制器来处理页面加载和表单提交. 您可以在GitHub上获取代码. 先决条件: 您应该有一个运行中的Spring MVC应用程序. ...

  5. Spring MVC表单验证

    看登录控制器代码: @RequestMapping(method=RequestMethod.POST,path="/login")public void login(@Valid ...

  6. Spring MVC表单实例

    以下内容引用自http://wiki.jikexueyuan.com/project/spring/mvc-framework/spring-mvc-form-handling-example.htm ...

  7. 一文学会 Spring MVC 表单标签

    ✅作者简介:2022年博客新星 第八.热爱国学的Java后端开发者,修心和技术同步精进.

  8. Spring MVC:表单处理卷。 5 –选择,选项,选项标签

    下拉列表是Web表单中最常见的元素之一. 在HTML中,可以使用适当的标签创建此类控件: <form:select> –下拉列表的父标签和<form:option> – < ...

  9. Spring MVC:表单处理卷。 2 –复选框处理

    很难想象现代Web应用程序中没有表单复选框的情况. 在之前的一篇文章中,我写了有关Spring MVC中的表单处理的文章 ,作为本系列文章的续篇,我将写有关Spring MVC表单的文章,尤其是关于复 ...

  10. Spring MVC:表单处理卷。 4 –单选按钮

    在软件开发领域,单选按钮是图形用户界面的重要组成部分. Spring MVC标签库为此表单元素提供了特殊标签. 更确切地说,有两个标签用于此目的:单选按钮,单选按钮. 两者对于特定任务都是有用的. 如 ...

最新文章

  1. java session 生命周期_JavaWeb关于session生命周期的几种设置方法
  2. Oracle数据库安然计谋分析(二)
  3. 测试用例优先级划分_全面的质量保障体系之测试用例分级
  4. 为什么要学python-为什么要学 Python?
  5. Python 爬虫进阶五之多线程的用法
  6. VS2010,C++ 制作静态库(*.lib),并使用
  7. 大数据支撑健康医疗服务落地
  8. 云南昭通暴雨强度公式_江门市区暴雨强度公式编制报告(图表)-江门市水务局.doc...
  9. Ubuntu系统下安装Gaussian09和GaussianView5(GS16和GV6安装同理)
  10. 如何做到微信机器人不封号_利用 Xposed 快速实现一个简易微信机器人
  11. pandas获取全部列名_pandas获取全部列名_pandas DataFrame数据重命名列名的几种方式...
  12. 在利用计算机高级语言进行,2016计算机一级考试多选题专项训练及答案
  13. selenium 浏览器打开新标签页
  14. 一个树莓派集群 (VAX)
  15. Cesium 添加边界墙边界线
  16. API汇总;API大全(转载)
  17. 链队的创建、入队、出队
  18. Revit建模助手独门绝技,一阳指给构件“ 元素上色 ”
  19. 运维监控工具之商用软件篇
  20. 使用linux 中的 tree 指定显示深度,显示文件目录结构

热门文章

  1. apache shiro怎么升级_Springboot整合Shiro之授权
  2. SpringBoot连接多RabbitMQ源
  3. mysql事务基础+基于innodb的行锁+间隙锁+如何锁定行
  4. java分布式对象——远程方法中的参数和返回值+远程对象激活
  5. jmeter负载测试测试_使用Apache JMeter负载测试Web应用程序
  6. java编程学习方法_在线学习Java编程的最佳方法
  7. 侦听127.0.01_Spring 4.2中由注释驱动的事件侦听器
  8. 设置Elasticsearch N-Gram字分析器的过程
  9. java多线程 异常处理_Java8多线程ForkJoinPool:处理异常
  10. spring 请求转码_Spring请求级备忘录