spring mvc跳转方式和返回值

返回ModelAndView

在controller中设置ModelAndView对象,根据view的名称和视图师徒解析器跳转到指定的页面。页面=视图解析器的前缀+viewname+视图解析器的后缀。

    //商品查询
    @RequestMapping("/queryItems")
    public ModelAndView queryItems(HttpServletRequest request) throws Exception{
        System.out.println("重定向或者转发传来的商品名:" + request.getParameter("itemsName"));

        //调用service查找数据库,查询商品列表
        List<ItemsCustom> itemsList = itemsService.findItemsList();

        //返回ModelAndView
        ModelAndView mav = new ModelAndView();

        //相当于request的setAttribute,在jsp页面能够可通过el表达式取出itemsList的值
        mav.addObject("itemsList", itemsList);
        mav.setViewName("items/itemsList");
        //指定视图,
        return mav;
    }

Model和String结合

ModelAndView和Model的用法差不多。ModelAndView使视图和返回数据可以集中在同一个变量,直接返回给前端。而使用Model,该类的对象只负责返回数据,具体的视图是通过返回String来完成。

    @RequestMapping(value="/editItems", method={RequestMethod.POST, RequestMethod.GET})
    public String editItems(Model model, String id) throws Exception {
        //调用service根据上平id查询商品信息
        ItemsCustom itemsCustom = itemsService.findItemsById(Integer.parseInt(id));

        model.addAttribute("itemsCustom", itemsCustom);
        return "items/editItems";
    }

redirect重定向

商品修改提交后,重定向到商品查询列表。

redirect重定向特点:浏览器地址栏中的url会变化。修改提交的request数据无法传到重定向的地址。因为重定向后重新进行request(request无法共享)。

    @RequestMapping(value="/edit", method={RequestMethod.POST, RequestMethod.GET})
    public String edit(HttpServletRequest request, Model model) throws Exception {
        String itemsName = request.getParameter("itemsName");
        System.out.println("将要修改的商品名称是:" + itemsName);

        //调用service,去修改对应的商品
        itemsService.editItems(null);

        //重定向到查询列表中
        return "redirect:queryItems";
    }

如上所诉,当修改商品信息之后,重定向到商品查询时,从request中取到的itemsName是null。

forward页面转发

通过forward进行页面转发,浏览器地址栏url不变,request可以共享。

    @RequestMapping(value="/edit", method={RequestMethod.POST, RequestMethod.GET})
    public String edit(HttpServletRequest request, Model model) throws Exception {
        String itemsName = request.getParameter("itemsName");
        System.out.println("将要修改的商品名称是:" + itemsName);
        //调用service,去修改对应的商品
        itemsService.editItems(null);
        //转发到查询列表中
        return "forward:queryItems";
    }

当修改商品信息之后,重定向到商品查询时,从request中取到的itemsName是刚才修改的商品的名称。

返回void

在controller方法形参上可以定义request和response,使用request或response指定响应结果:

  1. 使用request转向页面,如下:
    request.getRequestDispatcher(“页面路径”).forward(request, response);

  2. 也可以通过response页面重定向:
    response.sendRedirect(“url”)

  3. 也可以通过response指定响应结果,例如响应json数据如下:
    response.setCharacterEncoding(“utf-8”);
    response.setContentType(“application/json;charset=utf-8”);
    response.getWriter().write(“json串”);

    @RequestMapping(value="/json", method={RequestMethod.POST, RequestMethod.GET})
    public void json(HttpServletRequest request, HttpServletResponse response) throws IOException {
        response.setCharacterEncoding("utf-8");
        response.setContentType("application/json;charset=utf-8");
        response.getWriter().write("hello json");
    }

修改商品信息的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>订单修改</title>
</head>
<body>
    <center>
        <form action="edit" method="post">
        <table width="20%" border="1px">
            <tbody>
                <tr><td>id</td><td>${itemsCustom.id }</td></tr>
                <tr><td>商品名</td><td><input type="text" value="${itemsCustom.name }" name="itemsName" /></td></tr>
                <tr><td>价格</td><td><input type="text" value="${itemsCustom.price }" name="itemsPrice" /></td></tr>
                <tr><td>商品详情</td><td><input type="text" value="${itemsCustom.detail }" name="itemsDetail" /></td></tr>
                <tr><td>图片</td><td><input type="text" value="${itemsCustom.pic }" name="itemsPic" /></td></tr>
                <tr><td>订单创建时间</td><td>${itemsCustom.name }</td></tr>
                <tr><td colspan="2"><input type="submit" value="提交" /></td></tr>
            </tbody>
        </table>
        </form>
    </center>
</body>
</html>

商品列表jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!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>商品列表</title>
    <script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.8.0.js"></script>
    <script type="text/javascript">
        function testJson() {
            $.ajax({
                type : "post",
                url : "${pageContext.request.contextPath}/items/json",
                contentType : "application/json;charset=utf-8",
                //数据格式是json串,传进一个person
                data : '{"userName" : "shizongger","gender" : "male"}',
                success:function(msg){
                    alert(msg);
                },
                error:function(msg) {
                    alert("出错了.");
                }
            });
        }
    </script>
</head>
<body>
    <center>
        <table border="1px" width="80%">
            <thead>
                <tr><th>序列</th><th>商品名称</th><th>商品详情</th><th>商品价格</th><th>订单创建时间</th><th>修改</th></tr>
            </thead>
            <tbody>
                <c:forEach items="${itemsList }" var="items" varStatus="status">
                    <tr>
                        <td>${status.count }</td>
                        <td>${items.name }</td>
                        <td>${items.detail }</td>
                        <td>${items.pic }</td>
                        <td>${items.createtime }</td>
                        <td><a href="editItems?id=${items.id }">修改</a></td>
                    </tr>
                </c:forEach>
            </tbody>
        </table>
    </center>
    <button onclick="testJson()">测试json</button>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值