Struts 提供了Preparable接口,
prepare interceptor 会在Action 方法执行之前调用prepare()方法. 在prepare()方法执行之前之前,
prepare interceptor 会调用prepare[ActionMethodName] 方法.
package com.opensymphony.xwork2;
public interface Preparable {
void prepare() throws Exception;
}
一个实现Preparable的Action例子
public class EditAction extends ActionSupport implements Preparable {
@Override
public void prepare() throws Exception {
log.info("In prepare method...");
carModelsAvailable = carModelsService.getCarModels() ;
setPersonBean( editService.getPerson() );
}
public void prepareExecute() {
log.info("In prepareExecute method...");
}
public String execute() throws Exception {
log.info ("In execute method...");
editService.savePerson( getPersonBean() );
return SUCCESS;
}
public void prepareInput() {
log.info("In prepareInput method...");
}
public String input() throws Exception {
log.info("In input method...");
return INPUT;
}
...
}
Struts.xml中Action定义
<action name="edit" class="org.apache.struts.edit.action.EditAction" method="input">
<result name="input">/edit.jsp</result>
</action>
<action name="save" class="org.apache.struts.edit.action.EditAction" method="execute">
<result name="input">/edit.jsp</result>
<result name="success">/thankyou.jsp</result>
</action>
当调用edit.action时, 方法的执行顺序: prepareInput()->prepare()->input()
当调用save.ation时, 方法的调用顺序: prepareExecute()->prepare()->execute()