こんにちは私はすでにあなたが答えを見つけたかもしれないと答えるのはかなり遅いと知っていますが、他の人にとっては私が答えを投稿しています。 あなたがやっていることに非常に似ていることの1つは、sitemeshフィルタによって行われます。 はい、フィルタはStruts2フィルタの前後にありますので、簡単に入力と出力を混乱させることができます。 しかし、strutsはJSP/freemarker/velocityを評価し、ユーザーに渡される最終的なhtmlを生成します。 JSPは内部的にサーブレットが呼び出されますが、org.apache.struts2.views.freemarker.FreemarkerResult class
をチェックアウトすると、実際にはtemplate.process(model, writer);
に生成されたHTMLが表示されるため、少しトリッキーです。この作家は実際にはServletActionContext.getResponse().getWriter()
です。
ここでhtmlを取得するには、 が必要です。 toString()を動作させるには、ResponseWrapperを使用する必要があります。これは、フィルタで結果htmlを取得するのと同じ方法です。 Programming Customized Requests and Responsesを参照してください。
struts 2で生成されたhtmlを修正するためのリストです。これはテストされていませんが、以前のカスタムテンプレートエンジンで作成したコードから抽出されています。私にインターセプト()、すなわち、その実行の前に、またはドキュメントによると、言って、PreResultListenerを追加することができますで、私はおそらくあなたが指摘してきた何Custom template engine for 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
}
}
で完全な説明を掲載します: 「の場合最終的なResultオブジェクトが実行される前に作業する必要があります... " これは、JSPがレンダリングされていないことを意味します。アクションの結果がJSPをピックアップしてレンダリングした後で、*生成された* HTML全体にアクセスする必要があります。 はこの考えてみましょう: は クライアント - >リクエスト - >派遣 - >アクション - >結果 - > JSPはレンダリング - > HTML - 私が欲しい>クライアント : クライアント - >リクエスト - >派遣 - >アクション - >結果 - > JSPレンダリング - > HTML - > ***マイコード*** - >クライアント – Hisham