您的位置:首页 > 编程语言 > Java开发

spring mvc表单的展现、输入处理、校验的实现

2014-05-03 14:42 495 查看
之前已经实现了spring mvc的入门例子及如何处理带参数的请求Controller编写。本文主要记录:

1)重定向请求

2)处理路径中含有变量的请求

3)使用JSR-303进行校验

① 首先,编写一个方法实现一个表单的展现:

//展示表单
//params 可限制该方法只对包含特定参数的请求进行处理
@RequestMapping(method=RequestMethod.GET,params="new")
public String createForm(Model model){
model.addAttribute("user", new User());
return "/user/edit";
} 注意到,params="new",这意味着该方法处理的请求Url:xxx/home?new (home是定义Controller的请求路径)

这是跳转的页面定义(使用了velocity模板):

<form method="post">
<div>
<label for="userName">userName:</label>
<input name="userName" value="$!user.userName">
<span>$!br.getFieldError("userName").getDefaultMessage()</span>
</div>

<div>
<label for="email">Email:</label>
<input name="email" value="$!user.email">
</div>

<div>
<label for="age">age:</label>
<input name="age" value="$!user.age">
</div>
<button type="submit">Submit</button>
</form>View Code

② 然后,在页面上填入值,点击提交,如果不指定form的提交路径,则默认是xx/home(Controller的请求路径),此时需要编写处理表单的输入方法:

//处理表单输入
@RequestMapping(method=RequestMethod.POST)
//@Valid是对user参数的验证
public String addForm(@Valid User user,BindingResult br,Model model){
if(br.hasErrors()){
model.addAttribute("br",br);
return "/user/edit";
}
userService.saveUser(user);
return "redirect:/home/"+user.getUserName();
}a.在输入参数中,对User使用了@Valid,表示在user传入之前会进行校验,这是使用了JSR-303的校验规则,如何定义校验规则呢?在后面④-->>

b.在方法处理上, 如果校验失败,则会将BindingResult传入到方法中,通过br.hasErrors进行判断是否校验成功,如果失败,将br放在model中,以便在edit.vm页面中显示,这就是在页面edit.vm中,有<span>$!br.getFieldError("userName").getDefaultMessage()</span>(页面只写了这一处)

c.通过重定向到请求:/home/user.getUserName.路径中含有变量,因此需要定义处理请求路径变量的方法。

③ 定义处理请求路径变量的方法

//处理带有路径变量的请求
@RequestMapping(value="/{username}",method=RequestMethod.GET)
public String showUser(@PathVariable String username,Model model){
model.addAttribute("username", username);
return "home";
} 在@RequestMapping中,value使用了占位符{username},在参数String username使用了@PathVariable,表示的是路径的变量,说明该方法处理的请求为:xx/home/somebodyName,如请求的url为xxx/home/hahaha,则方法中的username为hahaha

④ 使用JSR-303进行校验

之前使用了@Valid User user,校验的是user对象,因此需要对User进行编写校验规则。使用的是JSR-303,在使用前,需要引入相关的jar包,如果是maven工程,需要定义maven坐标:

<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>4.2.0.Final</version>
<!-- <optional>true</optional> -->
</dependency>

OK,看下User的校验规则

public class User {

@Range(min=1,max=10,message="userName must be between 1 and 10 character long")
@Pattern(regexp="^[a-zA-z0-9]+$",message="userName Invalid")
private String userName;

private String email;

private int age;

//setter and getter...

}

运行工程,记录下效果:

1、请求展示表单的路径,输入过长的Username后提交:


2、输入特殊字符的Username后提交:


4、输入正常的Username后提交(没传count,因此没有值):

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: