Spring MVC:表单处理卷。 1个

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 {

	@Bean
	public 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 {

	@Override
	public 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处理表单。 并非所有可能的方式都可以做到。 在以后的课程中,我将演示表单处理的其他变体。 您可以在下面看到工作的结果:

Spring MVC形式处理结果

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值