SpringMVC学习入门第三个程序

接上一个程序,我们的增加修改的功能还没有实现,只是完成了页面跳转和传参和存放model

接下来我们就来模拟下对数据进行操作

首先说上在页面上出现http -400 报错原因,可能是你带了代了错误的参数或参数名有错,所以出现了400错误,一定要认真检查下你的参数拼写哦

特别提示:在add.jsp页面中不要加上那个id的属性输入框哦,因为添加的时候没有用到id这个属性,如果添加了的话会报错400错滴。

1.add.jsp和update.jsp分别为:也就是添加了将操作提交给某个请求

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="${pageContext.request.contextPath }/student/save.do" method="post">
		<table>
			<tr>
				<th col colspan="2">学生添加</th>
			</tr>
			<tr>
				<td>姓名:</td>
				<td><input type="text" name="name"></td>
			</tr>
			<tr>
				<td>年龄:</td>
				<td><input type="text" name="age"></td>
			</tr>
		
			<tr>
				<td colspan="2"><input type="submit" value="添加"></td>
			</tr>
		</table>
	</form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>update</title>
</head>
<body>
	<form action="${pageContext.request.contextPath }/student/save.do" method="post">
		<table>
			<tr>
				<th col colspan="2">学生修改</th>
			</tr>
			<tr>
				<td>姓名:</td>
				<td><input type="text" name="name" value="${student.name }"></td>
			</tr>
			<tr>
				<td>年龄:</td>
				<td><input type="text" name="age" value="${student.age }"></td>
			</tr>
			<tr>
				<td><input type="hidden" name="id" value="${student.id}"></td>
			</tr>
			<tr>
				<td colspan="2"><input type="submit" value="确定修改"></td>
			</tr>
		</table>
	</form>
</body>
</html>

2.在studentController下新增了添加/更新的方法:(因为是模拟的,所以程序在id方面会有点bug哦)

@RequestMapping("/save")
	public String save(Student student) {	
		if(student.getId()!=0) {
			Student s= studentList.get(student.getId()-1);
			s.setName(student.getName());
			s.setAge(student.getAge());
		}else {
			studentList.add(student);
		}		
		return "redirect:/student/list.do ";
	}

因为更新和新增,就是存在是否有id这个参数了,所以用id来区别使用哪个操作。这里的体现了springmvc对对象的自动封装(这个和struts2有点像,但是用起来更厉害哦,不过你要注意不要把input里的name属性写错了哦)。

还有return "redirect:/student/list.do ";

这个return的是什么呢?因为我们的目的是添加后就执行list()方法,所以就用到了springmvc的内部转发或者重定向了

区别是内部转发路径会发生改变,重定向路径不回发生改变

重定向使用方法就是redirect:+请求的路径

扫描二维码关注公众号,回复: 1447408 查看本文章

内部转发就是forward:+请求的路径了


3.做到这一步,你们要添加功能试一试用中文name,你会发现有乱码哦,还是springmvc封装了处理乱码的filter

我们直接在web.xml文件里面再贴上以下代码就可以了哦:(这里再敲以下重点哦,这也是个我们的新get到的技能)

<!-- 解决工程编码过滤器 -->
    <filter>
        <filter-name>characterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>characterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

4.现在我们再添加一个删除操作,修改list.jsp,这里你也会发现我们只是添加了一个连接而已了哦

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>test</title>
</head>
<body>
<a href="${pageContext.request.contextPath }/student/preSave.do">添加学生</a>
	<table>
		<tr>
			<th>编号</th>
			<th>姓名</th>
			<th>学生</th>
			<th>操作</th>
		</tr>
		<c:forEach var="student" items="${ studentList}">
			<tr>
				<td>${student.id }</td>
				<td>${student.name }</td>
				<td>${student.age }</td>
				<td>
				<a href="${pageContext.request.contextPath }/student/preSave.do?id=${student.id}">修改</a>
				<a href="${pageContext.request.contextPath }/student/delete.do?id=${student.id}">删除</a>
				</td>
			</tr>
		</c:forEach>

	</table>
</body>
</html>

5.然后当然还是新增一个新的delete方法来接收对删除操作的请求处理了

	@RequestMapping("/delete")
	public String delete(@RequestParam("id") int id) {		
		studentList.remove(id-1);
		return "redirect:/student/list.do ";
	}

删除的时候我们真的是id是必须要知道的了。


做到这里我们再次总结一下:

从中我们学到(使用)了什么呢?

1.springmvc的对象自动封装

2.springmvc的乱码处理过滤器

3.springmvc的内部转发和重定向


最后还是重新贴下总的controller的代码吧:

package com.controller;

import java.util.ArrayList;
import java.util.List;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

import com.entity.Student;

@Controller
@RequestMapping("/student")
public class StudentController {
	
	public static List<Student> studentList = new ArrayList<Student>();
	
	static {
		studentList.add(new Student(1,"zhu",15));
		studentList.add(new Student(2,"芳芳",16));
		studentList.add(new Student(3,"咩咩",17));
	}
	
	@RequestMapping("/list")
	public ModelAndView list() {		
		ModelAndView mav = new ModelAndView();
		mav.setViewName("student/list");
		mav.addObject("studentList", studentList);
		return mav;
	}
	
	@RequestMapping("/preSave")
	public ModelAndView preSave(@RequestParam(value="id",required=false) String id ) {		
		ModelAndView mav = new ModelAndView();
		if(id!=null) {
			mav.addObject("student",studentList.get(Integer.parseInt(id)-1));
			mav.setViewName("student/update");
		}else {
			mav.setViewName("student/add");
		}		
		return mav;
	}
	
	@RequestMapping("/save")
	public String save(Student student) {	
		if(student.getId()!=0) {
			Student s= studentList.get(student.getId()-1);
			s.setName(student.getName());
			s.setAge(student.getAge());
		}else {
			studentList.add(student);
		}		
		return "redirect:/student/list.do ";
	}
	
	@RequestMapping("/delete")
	public String delete(@RequestParam("id") int id) {		
		studentList.remove(id-1);
		return "redirect:/student/list.do ";
	}

}




猜你喜欢

转载自blog.csdn.net/lp15203883326/article/details/80436752