这是一个工作代码,类似于PreResultListener。
public String intercept(ActionInvocation invocation) throws Exception {
invocation.addPreResultListener(new PreResultListener() {
@Override
public void beforeResult(ActionInvocation invocation, String resultCode) {
try {
// commit based on the resultCode comparision
if (StringUtils.equals(resultCode,"302_redirect") {
TransactionService.commitTransaction();
}
// or commparision based on the redirect handler
// Class names are from struts-default.xml
/*
String resultConfigClassName = invocation.getProxy().getConfig().getResults().get(resultCode).getClassName();
if (StringUtils.equals(resultConfigClassName,"org.apache.struts2.dispatcher.ServletRedirectResult")
|| StringUtils.equals(resultConfigClassName, "org.apache.struts2.dispatcher.ServletActionRedirectResult")) {
TransactionService.commitTransaction();
}
*/
}
catch (Exception e) {
// Ignore don't do anything
}
}
});
TransactionService.startTransaction();
invocation.invoke();
TransactionService.commitTransaction();
}