通过表单提交我们在后台需要获取提交的数据:
这里我们可以在业务方法中提交HttpRequest参数,来进行获取,这里就不演示了,接下来我们看一种spring的方法:
主要看一下我们的控制类中的业务方法的书写:
/**
* Action 控制器
* 获取参数
* 单例
* @author user
*
*/
@Controller
@RequestMapping(value = "/user")
public class UserAction {
/*
* 用户注册
*/
@RequestMapping(value = "register")
public String register(Model model,String userName,double salary) throws Exception{
System.out.println("username = "+userName+" salary :"+salary);
model.addAttribute("message", "增加员工成功");
return "/jsp/success.jsp";
}
/*
* 用户登录
*/
@RequestMapping(value = "logon")
public String logon(Model model,String userName) throws Exception{
System.out.println("userName = "+userName);
model.addAttribute("message", "员工登录成功");
return "/jsp/success.jsp";
}
}
我们在业务方法中加了两个参数,String类型的userName,和Double类型的salary。提交表单以后,会自动获取form中的name属性和业务方法参数一样的值,并给业务方法参数赋值。
但是如果提交的值很多的话,这种方法就很不方便。
所以,很容易想到,可以在业务方法中添加对象。比如我们创建User的JavaBean:
/*
* 用户注册 只能接受post请求
*/
@RequestMapping(value = "register")
public String register(User user,Model model) throws Exception{
System.out.println("用户注册:"+user.toString());
model.addAttribute("user", user);
//转发到success.jsp页面
return "/jsp/success.jsp";
}
User.java:
/**
* 用户
* @author user
*
*/
public class User {
private Integer id = 1;
private String userName;
private Double salary;
private Date hireDate;
public User() {
// TODO Auto-generated constructor stub
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public Double getSalary() {
return salary;
}
public void setSalary(Double salary) {
this.salary = salary;
}
public Date getHireDate() {
return hireDate;
}
public void setHireDate(Date hireDate) {
this.hireDate = hireDate;
}
@Override
public String toString() {
return "User [id=" + id + ", userName=" + userName + ", salary=" + salary + ", hireDate=" + hireDate.toLocaleString() + "]";
}
}
这里要注意Bean里面的属性的名字和form表单中的名字要一样。这样才会自动赋值。
接下来,我们看一下,如果碰到时间格式的数据,用注解方式如何实现:
在xml中我们是重写initBinder方法来实现,用注解的话,只需要在我们的自定义的类型转换器上的方法加initBinder注解即可:
@InitBinder
protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception {
//向springmvc内部注入一个自定义的转换器
//参数一:最终将String转成什么类型的字节码
//参数二:属性编辑器:自定义的转换规则
// CustomDateEditor参数一:时间的格式,参数二:可不可以为空
binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"), true));
}