一、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接口结合使用:
?
?
class="java">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; }
?
?