Эй, я знаю, что уже довольно поздно, чтобы ответить, что вы, возможно, уже узнали ответ, однако для других, чтобы помочь, я публикую ответ.
Одна вещь, которая очень похожа на то, что вы делаете, выполняется фильтром sitemesh.
Да, фильтр идет до и после самого фильтра Struts2, поэтому вы можете легко связываться со входами и выходами.
Но Struts оценивает JSP / freemarker / speed и генерирует окончательный HTML, который передается пользователю. JSP немного сложнее, потому что внутренне сервлет вызывается, но проверив org.apache.struts2.views.freemarker.FreemarkerResult class
, вы можете увидеть фактический HTML, сгенерированный в template.process(model, writer);
. Этот писатель на самом деле ServletActionContext.getResponse().getWriter()
;
Теперь, чтобы получить HTML все, что вам нужно сделать, это
ServletActionContext.getResponse().getWriter().toString() //This does not work out of box
. Чтобы заставить toString () работать, вам нужно использовать ResponseWrapper - это тот же метод, чтобы получить результат html в фильтрах. См. Программирование пользовательских запросов и ответов .
Список для изменения результирующего html в Struts 2. Это не проверено, но оно извлечено из моего кода, который я написал ранее для пользовательского шаблонизатора Я, наверное, выложу полное описание в Кастомный движок шаблонов для struts2
public class DecoratorInterceptor implements Interceptor {
public String intercept(ActionInvocation invocation) throws Exception {
final ActionContext context = invocation.getInvocationContext ();
HttpServletResponse responseParent = (HttpServletResponse)
context.get(ServletActionContext.HTTP_RESPONSE);
CharResponseWrapper wrapper = new CharResponseWrapper(responseParent);
ServletActionContext.setResponse(wrapper);
//Actual Action called
String result = invocation.invoke();
String htmlReturned = wrapper.toString();
//play with htmlReturned ...
String modifiedhtml = pushintoMemCache(htmlReturned );
CharArrayWriter car = new CharArrayWriter();
car.write(modifiedhtml );
PrintWriter out = responseParent.getWriter();
out.write(car.toString());
out.flush();
}
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void init() {
// TODO Auto-generated method stub
}
}