полностью описана в http://blog.agilelogicsolutions.com/2011/05/struts-2-interceptors-before-between.html
Вы можете использовать перехватчик:
- До действий
- между действием и результатом
- После Посмотреть Вынесено
Как уже упоминалось на сайте здесь образцы кода
Перед перехватчик
public class BeforeInterceptor extends AbstractInterceptor {
@Override
public String intercept(ActionInvocation invocation) throws Exception {
// do something before invoke
doSomeLogic();
// invocation continue
return invocation.invoke();
}
}
}
между действием и результатом
public class BetweenActionAndResultInterceptor extends AbstractInterceptor {
@Override
public String intercept(ActionInvocation invocation) throws Exception {
// Register a PreResultListener and implement the beforeReslut method
invocation.addPreResultListener(new PreResultListener() {
@Override
public void beforeResult(ActionInvocation invocation, String resultCode) {
Object o = invocation.getAction();
try{
if(o instanceof MyAction){
((MyAction) o).someLogicAfterActionBeforeView();
}
//or someLogicBeforeView()
}catch(Exception e){
invocation.setResultCode("error");
}
}
});
// Invocation Continue
return invocation.invoke();
}
}
}
После Посмотреть Вынесено
public class AfterViewRenderedInterceptor extends AbstractInterceptor {
@Override
public String intercept(ActionInvocation invocation) throws Exception {
// do something before invoke
try{
// invocation continue
return invocation.invoke();
}catch(Exception e){
// You cannot change the result code here though, such as:
// return "error";
// This line will not work because view is already generated
doSomeLogicAfterView();
}
}
}
}
Я понимаю, что 'перехватывать()' называется предварительной обработки, но какой метод называется постобработка? Является ли 'destroy()' всегда называемой пост-обработкой для каждого запроса или только раз в то время? –
см. Я обновил свой ответ – PSR
Удивительный, спасибо большое. Я приму свой ответ, как только это позволит. Еще один вопрос: что, если я хочу запустить собственный метод действия, например, если я хотел запустить 'myAction.setSomeValue()' непосредственно перед 'invocation.invoke()', вы знаете, как это можно сделать? –