数据回写
数据回写:在做数据更新的时候服务端查询的数据自动填充到表单中
1.默认方式
通过 Map Mode ModelMap绑定数据
//数据回写
@RequestMapping("/userUpdate")
public String userUpdate(User user,Model m){
user = new User();
user.setId(1);
user.setName("张三");
user.setAddress("蓬莱东路");
m.addAttribute("user",user);
return "/user.jsp";
}
页面中回写
<h1>hello</h1>
<form action="">
id:<input type="text" value="${user.id}"><br>
姓名:<input type="text" value="${user.name}"><br>
地址:<input type="text" value="${user.address}"><br>
<input type="submit" value="提交"><br>
</form>
2.通过Model方式
如果使用对象去接收客户端传来的数据,那么对象默认会被自动放到model中,在前端页面可以直接使用对象中的数据。
表单代码如下:
/** 形参 默认会被 处理器适配器 添加到Model对象中
* 执行model.addAttribute("user",user)的操作
*/
@RequestMapping("/add1")
public String add1(Book book) {
System.out.println(book);
return "/user.jsp";
}
3.@ModelAttribute注解实现
3.1 修改参数回显变量名
在需要回传的对象前添加@ModelAttribute(“aa”)注解,在界面中就可以通过bb前缀来获取回写信息
/**
* 形参 默认会被 处理器适配器 添加到Model对象中
* 执行model.addAttribute("user",user)的操作
* @ModelAttribute("a") 指定保存到Model中的信息的key值
*/
@RequestMapping("/userUpdate2")
public String userUpdate2(@ModelAttribute("aa")User user){
user.setName("张三");
return "/user.jsp";
}
<h1>hello</h1>
<form action="">
id:<input type="text" value="${aa.id}"><br>
姓名:<input type="text" value="${aa.name}"><br>
地址:<input type="text" value="${aa.address}"><br>
<input type="submit" value="提交"><br>
</form>
3.2.配置全局变量名
给接口中的每个方法统一返回一份数据
/**
* @ModelAttribute
* 被这个注解所标注的方法
* 会在当期类中的任意方法执行的时候 都会触发该方法 并把结果保存到Model中
* 在页面中可以通过 "list" 作为 key 获取
*/
@ModelAttribute("list")
public List<String> userUpdate(){
return Arrays.asList("1","2","3");
}
页面中获取
<h1>hello ${list}</h1>
<form action="">
id:<input type="text" value="${aa.id}"><br>
姓名:<input type="text" value="${aa.name}"><br>
地址:<input type="text" value="${aa.address}"><br>
<input type="submit" value="提交"><br>
</form>
异常处理
方式一:SpringMVC.xml中配置指定异常跳转bean
<!-- 配置指定异常跳转bean -->
<bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<!-- 根据servlet报的错,作为键名来匹配,找上了就跳对应的资源 -->
<prop key="java.lang.NullPointerException">error.jsp</prop>
<prop key="org.apache.commons.fileupload.FileUploadBase$SizeLimitExceededException">error.jsp</prop>
</props>
</property>
</bean>
方式二:定义异常处理器
@Component //注意该类需要交给Spring容器管理
public class MyExceptionResolver implements HandlerExceptionResolver{
@Override
public ModelAndView resolveException(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2,
Exception ex) {
System.out.println(ex.getClass().getName());
ModelAndView mv = new ModelAndView();
if(ex instanceof NullPointerException){
System.out.println("空指针...");
mv.addObject("msg","空指针异常");
}else if(ex instanceof ArithmeticException){
System.out.println("算术异常...");
mv.addObject("msg","算术异常");
}else{
System.out.println("其他异常...");
mv.addObject("msg","其他异常");
}
mv.setViewName("/error");
return mv;
}
}
方式三:单元方法里定义
@Controller
public class UserController {
@RequestMapping("/demo1")
public String demo1(){
String str = null;
str.toString();
return "/user";
}
//出现空指针,由本方法处理
@ExceptionHandler(value=NullPointerException.class)
public ModelAndView handleNullPointerException(){
System.out.println("空指针异常...");
ModelAndView mv = new ModelAndView();
mv.setViewName("/error");
mv.addObject("msg","空指针异常...");
return mv;
}
}