欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

springmvc5.1.9在控制器中一个方法可跳视图也可跳方法问题解决

程序员文章站 2024-03-15 11:09:31
...

springmvc5.1.9在控制器中一个方法可跳视图也可跳方法问题解决

springmvc框架版本

5.1.9

浏览本文的前提

配置好springmvc运行环境,并知晓控制器的定义及访问。

本文关于springmvc的配置

此处关乎到理解后续内容
配置的路由拦截后缀为 *.blank
有学生实体类Student
有学生相关视图在/WEB-INF/pages/student/目录下

正文

我们已学生添加业务为例子,没有表单提交时跳到添加页面,有表单提交时添加学生后跳转到list方法。,上代码!

package controller;

import java.util.List;

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

import dao.BjDao;
import dao.StudentDao;
import vo.Bj;
import vo.Student;

@Controller
@RequestMapping("/student")
public class StudentController {
	BjDao bjDao = null;
	StudentDao studentDao = null;

	public StudentController() {
		// 实例化bjDao、studentDao
		bjDao = new BjDao();
		studentDao = new StudentDao();
	}

	/**
	 * 学生列表
	 */
	@GetMapping("/list")
	public ModelAndView list() {
		ModelAndView mav = new ModelAndView();
		List<Student> studentList = null;
		try {
			studentList = studentDao.queryAll();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		mav.addObject("studentList", studentList);
		return mav;// 这个地方未设置viewname,自动返回本页面,后面相同方法都是这样
	}

	/**
	 * 添加页面及添加业务
	 */
	@RequestMapping("/add")
	public ModelAndView add(@ModelAttribute Student student) throws Exception {
		ModelAndView mav = new ModelAndView();
		List<Bj> bjList = null;
		// 如果不是添加业务,转到添加页面
		if (student == null || student.getSname() == null) {
			bjList = bjDao.queryAll();
			mav.addObject("bjList", bjList);
			return mav;
		}

		// 如果是添加业务,进行添加业务
		// 添加成功 转到list方法
		// 添加失败 转到add页面并给予警示
		try {
			studentDao.add(student);
			mav.setViewName("redirect:/student/list.blank");
			return mav;
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			mav.addObject("info", "学生学号重复或数据库异常!添加失败!");
			bjList = bjDao.queryAll();
			mav.addObject("bjList", bjList);
			return mav;
		}
	}
	
	/**
	 * 以下省略编辑和删除业务
	 */
}

结论(无耐心的朋友可直接看这一步)

如上代码可见,我们使用ModelAndView 类可以实现跳转方法,只需设置viewName为redirect:你要跳转的方法的mapping(要完整,包括后缀,除非你url-pattern为/*,此时可以写后缀)。
而我们想要跳转页面时,如果要跳转的页面和你当前方法的mapping相同,可以直接返回空视图,否则你需要设置viewName为你的视图(不需要带redirect)。