Spring MVC之数据回写、异常处理

一、数据回写

1、默认方式

Controller定义如下:

    @RequestMapping("/doLogin")
    public String doLogin(String username, String password, Model model) {
        if ("zhangsan".equals(username) && "123".equals(password)) {
            return "index";
        }
        model.addAttribute("username", username);
        model.addAttribute("password", password);
        return "forward:/login";
    }

form表单定义如下:

<form action="/doLogin" method="post">
    <table>
        <tr>
            <td>用户名</td>
            <td><input type="text" name="username" value="${username}"></td>
        </tr>
        <tr>
            <td>密码</td>
            <td><input type="password" name="password" value="${password}"></td>
        </tr>
        <tr>
            <td><input type="submit" value="登录"></td>
        </tr>
    </table>
</form>

2、Model方式数据回写

表单定义如下:

<form action="h5" method="post">
		<table>
			<tr>
				<td>编号:</td>
				<td><input type="text" name="id" value="${user.id }"></td>
			</tr>
			<tr>
				<td>姓名:</td>
				<td><input type="text" name="name" value="${user.name }"></td>
			</tr>
			<tr>
				<td>地址:</td>
				<td><input type="text" name="address" value="${user.address }"></td>
			</tr>
			<tr>
				<td>出生日期:</td>
				<td><input type="date" name="birth" value="${user.birth }"></td>
			</tr>
			<tr>
				<td>破游戏:</td>
				<td><input type="checkbox" name="str" value="cs">CS</td>
				<td><input type="checkbox" name="str" value="lol">LOL</td>
				<td><input type="checkbox" name="str" value="csgo">CSGO</td>
			</tr>
			
			<tr>
				<td>集合:</td>
				<td><input type="checkbox" name="list" value="cs1">CS11</td>
				<td><input type="checkbox" name="list" value="lol1">LOL11</td>
				<td><input type="checkbox" name="list" value="csgo1">CSGO11</td>
			</tr>
			<tr>
				<td>猫咪编号:</td>
				<td><input type="text" name="cat.id" value="${user.cat.id }"></td>
			</tr>
			<tr>
				<td>猫咪姓名:</td>
				<td><input type="text" name="cat.name" value="${user.cat.name }"></td>
			</tr>
			<tr>
				<td>猫咪颜色:</td>
				<td><input type="text" name="cat.color" value="${user.cat.color }"></td>
			</tr>
			<tr>
				<td><input type="submit" name="提交"></td>
			</tr>
		</table>
	</form>

Controller定义如下:

	/**
	 * 数据回写
	 * @param user
	 * @return
	 */
	@RequestMapping("/h5")
	public String hello05(User user) {
		user.setName("王五");
		System.out.println(user);
		return "/user.jsp";
	}

页面访问
在这里插入图片描述
提交,数据回写
在这里插入图片描述

3、@ModelAttribute注解


此注解整体有两种不同的用法:
1、修改参数回显变量名:
修该方法如下:

    @RequestMapping("/doLogin")
    public String doLogin(@ModelAttribute("bbb") User user) {
        if ("zhangsan".equals(user.getUsername()) && "123".equals(user.getPassword())) {
            return "index";
        }
        return "forward:/login";
    }

2、配置全局响应值:
例如:在某一Controller层中,接口中的每一个方法都返回某一个集合,此时可以使用@ModelAttribute统一返回。

  @ModelAttribute("as")
    public List<String> getAllAddress() {
        List<String> as = new ArrayList<>();
        as.add("深圳");
        as.add("广州");
        as.add("海口");
        return as;
    }

注意:@ModelAttribute(“as”)注解中的as就是返回数据的key,通过as去访问数据。

二、异常处理

项目中的异常需要统一处理,正常情况下,需要提前准备好一个错误页面,当项目出错了,将该页面展示给用户。

1、自定义异常(可选)

public class CustomException extends Exception {
    private String message;
    public CustomException(String message) {
        super(message);
        this.message = message;
    }
    @Override
    public String getMessage() {
        return message;
    }
    public void setMessage(String message) {
        this.message = message;
    }
}

2、定义异常处理器(注意,异常处理器要被注册为bean)

@Component
public class MyExceptionResolver implements HandlerExceptionResolver {
    @Override
    public ModelAndView resolveException(HttpServletRequest req, HttpServletResponse resp, Object o, Exception e) {
        ModelAndView mv = new ModelAndView();
        mv.setViewName("error");
        mv.addObject("error", e.getMessage());
        return mv;
    }
}

在异常处理的bean中,指定视图名和错误信息。

3、提前定义好错误页面:

<body>
${error}
<h1>系统维护中,请稍后访问...............</h1>
</body>

4、最后,在项目需要的地方抛出异常

@GetMapping("/reg")
    public String reg(Integer i) throws Exception {
        if (i==0){
            throw new CustomException("i不能为0");
        }else if (i==1){
            throw new Exception("i不能为1");
        }
        return "reg";
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值