Функция списка шаблонов панели отладки Django для Struts2 - PullRequest
0 голосов
/ 03 сентября 2010

Я разрабатываю приложение Struts2 , которое использует Sitemesh в качестве движка шаблонов.Что мне нужно, это список всех шаблонов (JSP), которые используются по запросу.

В других проектах я использую Django Framework , с ним у меня есть этот удивительный ОтладкаПанель инструментов , которая, помимо многих других полезных сведений, предоставляет мне список шаблонов, которые используются для отображения страницы в запросе.

Django Debug Toolbar - Template Section

Этот список на удивление полезен, когда имеетсяболее 600 шаблонов, образующих сложную сеть шаблонов, и мне нужно изменить <br /> на <p></p> в одном из них.

Ну, я не ожидаю ничего более приятного для Struts2, простонеобработанный список LOG.debug(<template>); сделает мою работу намного проще.

1 Ответ

0 голосов
/ 07 сентября 2010

Хорошо, я прочитал материал и создал следующий класс:

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}

Я обновлю этот пост, если найду какой-нибудь дополнительный полезный вывод.

...