0

テンプレートエンジンとしてSitemeshを使用するStruts2アプリケーションを開発しています。必要なのは、リクエストで使用されるすべてのテンプレート(JSP)のリストです。

他のプロジェクトでは、Django Frameworkを使用しています。この素晴らしいデバッグツールバーには、他の多くの有用な情報に加えて、ページの表示に使用されるテンプレートのリストが表示されます。

Djangoデバッグツールバー-テンプレートセクション

このリストは、複雑なテンプレートWebを形成する600を超えるテンプレートがあり、そのうちの1つでを<br />に変更する必要がある場合に驚くほど役立ちます。<p></p>

Struts2には、これほど素晴らしいものは期待していません。生のリストをLOG.debug(<template>);作成するだけで、作業が非常に簡単になります。

4

1 に答える 1

0

わかりました、私はいくつかのものを読んで、次のクラスを作りました:

package x;

import java.util.Map;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.config.entities.ResultConfig;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import com.opensymphony.xwork2.interceptor.PreResultListener;

public class TemplatesDebugInterceptor extends AbstractInterceptor {

    private static final long serialVersionUID = 4030044344066761593L;
    Log log = LogFactory.getLog(TemplatesDebugInterceptor.class);

    @Override
    public String intercept(ActionInvocation invocation) throws Exception {
        try {
            if (ServletActionContext.getActionMapping() != null) {
                String className = invocation.getAction().getClass().getCanonicalName();
                String methodName = ServletActionContext.getActionMapping().getMethod();
                log.info("===========================");
                log.info(className+"."+methodName);
            }
            invocation.addPreResultListener(new PreResultListener() {
                public void beforeResult(ActionInvocation invocation,String resultCode) {
                    Map<String, ResultConfig> resultsMap = invocation.getProxy().getConfig().getResults();
                    ResultConfig finalResultConfig = resultsMap.get(resultCode);
                    log.info(finalResultConfig.getParams());
                }
            });
        } catch (Exception e) {
            log.error("[ERROR] Could not list templates: ", e);
        }
        return invocation.invoke();
    }
}

これをstruts.xmlに追加しました:

<interceptors>
    <interceptor name="templates" class="x.TemplatesDebugInterceptor" />
    (...)
    <interceptor-stack name="defaultStackBizgov">
        <interceptor-ref name="templates"/>
        (...)

そして、それは完了です!:

13:52:00,279 INFO  [STDOUT] [INFO] (http-0.0.0.0-8080-7) TemplatesDebugInterceptor - x.ProcedureDetailsAction.validateSubmitPublication
13:52:00,357 INFO  [STDOUT] [INFO] (http-0.0.0.0-8080-7) TemplatesDebugInterceptor - {location=/WEB-INF/jsp/indexPage.jsp}
13:52:00,763 INFO  [STDOUT] [INFO] (http-0.0.0.0-8080-7) TemplatesDebugInterceptor - {location=/WEB-INF/jsp/publicationView.jsp}

さらに便利な出力が見つかったら、この投稿を更新します。

于 2010-09-07T13:01:28.267 に答える