1.参数绑定
(1)日期类型 java.util.Date
<form action="${pageContext.request.contextPath}/addUser">
用户名 <input type="text" name="username" value="${user.username }">
密码 <input type="text" name="password" value="${user.password }">
年龄<input type="text" name="age" value="${user.age }">
出生日期 <input type="text" name="birth" value="${user.birth }">
<input type="submit" value="保存">
</form>
//pojo类
public class UserInfo {
private String username;
private String password;
private int age;
private Date birth; // java.util.Date
//get set
}
@Controller
public class MyControl {
@RequestMapping("/addUser")
public String addUser(UserInfo user){
System.out.println(user);
return "success";
}
}
//400 原因参数中pojo有日期类型
解决办法:
(1)pojo类 格式化注解
springmvcConfig.xml中开启mvc注解扫描驱动
<mvc:annotation-driven>
@DateTimeFormat(pattern="yyyy-MM-dd")
private Date birth;
(2)控制类中初始化绑定
@Controller
public class MyControl {
@InitBinder
public void initband(WebDataBinder bind){
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");
df.setLenient(false);
bind.registerCustomEditor(Date.class,new CustomDateEditor(df,true));
}
@RequestMapping("/addUser")
public String addUser(UserInfo user){
System.out.println(user);
return "success";
}
}
(3)采用处理器适配器中注入自定义的参数组件(略)
(2)数组类型
批量处理更新、删除
//查询
@RequestMapping("/showUsers")
public String showUsers(Model model){
List<UserInfo> list=new ArrayList();
list.add(new UserInfo(10,"tom","123",18,new Date()));
list.add(new UserInfo(20,"kity","123",18,new Date()));
list.add(new UserInfo(30,"mike","123",18,new Date()));
model.addAttribute("userList", list);
return "showUser";
}
//批量更新
@RequestMapping("/updateAllUser")
public String updateAllUser(CustomUsers custUser){
for (UserInfo userInfo : custUser.getUsers()) {
System.out.println(userInfo);
}
return "success";
}
//showUser.jsp
用户列表
<form action="${pageContext.request.contextPath}/updateAllUser">
<c:forEach items="${userList }" var="uu" varStatus="ss">
编号 <input type="text" name="users[${ss.index}].id" value="${uu.id }">
用户名 <input type="text" name="users[${ss.index}].username" value="${uu.username }">
密码 <input type="text" name="users[${ss.index}].password" value="${uu.password }">
年龄<input type="text" name="users[${ss.index}].age" value="${uu.age }">
出生日期 <input type="date" name="users[${ss.index}].birth" value="${uu.birth }">
<br/>
</c:forEach>
<input type="submit" value="批量更新">
</form>
//自定义包装pojo
public class CustomUsers {
List<UserInfo> users;
public List<UserInfo> getUsers() {
return users;
}
public void setUsers(List<UserInfo> users) {
this.users = users;
}
}
//批量删除
@RequestMapping("/showUsers2")
public String showUsers2(Model model){
List<UserInfo> list=new ArrayList();
list.add(new UserInfo(10,"tom","123",18,new Date()));
list.add(new UserInfo(20,"kity","123",18,new Date()));
list.add(new UserInfo(30,"mike","123",18,new Date()));
model.addAttribute("userList", list);
return "showUser2";
}
@RequestMapping("/delAllUser")
public String delAllUser(Integer[] ids){ //int的包装类 ids 和checkbox name名一致
for (Integer i : ids) {
System.out.println(i);
}
return "success";
}
//showUser2
<body>
用户列表
<form action="${pageContext.request.contextPath}/delAllUser" onsubmit="return ck()">
<c:forEach items="${userList }" var="uu" varStatus="ss">
编号 <input type="checkbox" name="ids" value="${uu.id }">
用户名 <input type="text" value="${uu.username }">
密码 <input type="text"value="${uu.password }">
年龄<input type="text" value="${uu.age }">
出生日期 <input type="date" value="${uu.birth }">
<br/>
</c:forEach>
<input type="submit" value="批量删除所选项" >
</form>
<script src="${pageContext.request.contextPath}/jquery-3.2.1.js"></script>
<script>
function ck(){
var f=false;
var objs=document.getElementsByName("ids");
var count=0;
for(var i=0;i<objs.length;i++){
if(objs[i].checked){
count++;
}
}
//console.log($("input:checked").length)
if(count!=0){
f=true;
}else{
alert("请选择")
}
return f;
}
</script>
</body>
静态文件:css images js 404资源找不到
解决办法:在web.xml 中放行
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.js</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.css</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/images杠*</url-pattern>
</servlet-mapping>
5.数据校验
springmvc数据校验步骤
pom.xml导入校验jar文件
配置校验器
校验器注入到处理器适配器中
添加校验规则
错误信息文件
捕获错误信息
显示错误信息
<!-- spring校验 start -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>4.3.0.Final</version>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.0.0.GA</version>
</dependency>
<dependency>
<groupId>org.jboss.logging</groupId>
<artifactId>jboss-logging</artifactId>
<version>3.1.0.CR2</version>
</dependency>
<!-- spring校验 end -->
public class UserInfo {
private int id;
@NotNull(message="用户名不能为null")
@NotEmpty(message="{name.not.empty}")
private String username;
@Size(min=6,max=10,message="{pass.not.correct}")
private String password;
@Pattern(regexp="2\\d{1}" ,message="{age.not.inrange}")
private int age;
}
@RequestMapping(value="/registerUser",method={RequestMethod.POST})
public String registerUser(Model model,@Validated UserInfo user,BindingResult errormsg){
//打印错误信息
if(errormsg.hasErrors()){
List<ObjectError> list =errormsg.getAllErrors(); //获取错误信息列表
for (ObjectError err : list) {
System.out.println(err.getDefaultMessage()); //获取错误信息的message值
}
model.addAttribute("errorList", list);
return "register";
}else{
int res=userServiceImpl.register(user);
if(res!=0){
return "success";
}else{
return "failure";
}
}