springmvc 校验,新增,及在输入页面报错 command找不到bean的原因。
1. 在显示跳转的页面控制器中,传入modelAttribute的赋值,并在显示的jsp页面,用modelAttribute的属性将他显示出来。
如控制器代码:
@RequestMapping("/adminList") public String adminList(Admin admin) { return "adminList"; }
这段代码主要负责转向,需要带上参数,admin。
然后jsp页面,有如下显示:
<form:form action="adminAdd" method="post" modelAttribute="admin" > user:<form:input path="name" /><form:errors path="name" /><br> password:<form:input path="password" /><form:errors path="password"/><br> email:<form:input path="email" /><form:errors path="email"/><br> lock:<form:input path="lockFlag" /><br> <input type="submit"> </form:form>
具体的校验过程,需要在添加方法中,实现校验:
@RequestMapping("/adminAdd") public String adminAdd(@Valid Admin admin ,BindingResult error) { if(error.getErrorCount()>0) { System.out.println("出错了!"); for(FieldError err:error.getFieldErrors()){ System.out.println(err.getField() + ":" + err.getDefaultMessage()); } return "adminList"; } adminService.addAdminService(admin); return "addSuccess"; }
校验的元数据,在bean中,用注解的方式标注
在hibernate-validator的jar 6.0.18中,在引入jar时提示hibernate的命名空间的那个已经过期,可以用spring提供的,试验结果,新的spring的可以跑通。
package cn.taotao.bean; import javax.validation.constraints.Email; import javax.validation.constraints.NotEmpty; public class Admin { private int id; @NotEmpty private String name; @NotEmpty private String password; @Email private String email;
其中最关键的一点,就是在转向时,带入bean的参数。
另外如果对于修改的操作,需要注入@ModelAttribute的方法,他会提前执行并且给表单域赋值。(待测)
@ModelAttribute public void getAdmin(@RequestParam(value="id",required=false) Integer id, Map<String, Object> map){ if(id != null){ map.put("admin", adminService.getAdminByIdService(id)); } }