一、Preparable接口
该接口有一个prepare()方法,实现该接口的action在执行时首先执行该方法,prepare()方法的执行点是在:setXxx()和execute()的执行之前,如创建prepareAdd方法,则在执行add方法前,将先执行prepareAdd方法 。
二、ModelDriven接口
ModelDriven接口的作用是实现模型驱动而不需要在表单中使用如user.username的方式,只需写username即可,必须实现该接口getModel方法。
defaultStack无法接收prepare()需要的数据,需配置paramsPrepareParamsStack拦截器栈。使用prepare拦截器之前,应先调用params拦截器,prepare() 才能接收到表单数据,调用的顺序为:params --> prepare --> modelDriven --> params。
Preparable、ModelDriven接口结合使用:
private User user;
private Long id;
private UserService userService;
public void setId(Long id) {
this.id = id;
}
public void prepare() throws Exception {
if(id != null) {
user = new User();
} else {
user = userService.getById(id);
}
}
public Object getModel() {
return user;
}