There is a PreResultListener interface. The implementation of this from the action is not the most beautiful.
An example of using this interface for your purpose may be to create an abstract support class, for example:
public abstract class PreResultSupport extends ActionSupport implements PreResultListener { protected abstract String doExecute(); @Override public String execute() { ActionContext.getContext().getActionInvocation().addPreResultListener(this); return doExecute(); } }
Then, for the actions you want to perform "after preparation", you can extend this support class:
public class ExampleAction extends PreResultSupport { private String instanceField; @Override protected String doExecute() {
source share