Я определяю пользовательский перехватчик, используемый для регистрации времени, но он не работает. вот мой собственный код перехватчика:Почему мой пользовательский перехватчик не работает
public class TimeConsumedInterceptor extends AbstractInterceptor
{
/*
* {@inheritDoc}
*/
@Override
public String intercept(ActionInvocation invocation) throws Exception
{
long start = System.currentTimeMillis();
String result = invocation.invoke();
long end = System.currentTimeMillis();
System.out.println("time consumed: " + (end - start));
return result;
}
}
Я определяю новый XML-файл: Écs-DEFAULT.XML (он находится непосредственно под src
пакет)
<struts>
<include file="struts-default.xml"></include>
<!-- ecs-default package is abstract -->
<package name="ecs-default" extends="struts-default" abstract="true">
<interceptors>
<interceptor name="ecsTimer" class="com.nader.interceptor.TimeConsumedInterceptor"></interceptor>
<interceptor-stack name="ecsStack">
<interceptor-ref name="ecsTimer"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!-- default stack used for ecs-default package -->
<default-interceptor-ref name="ecsStack"></default-interceptor-ref>
<global-results>
<result name="error">error.jsp</result>
</global-results>
<global-exception-mappings>
<exception-mapping exception="java.lang.Exception" result="error" />
</global-exception-mappings>
</package>
</struts>
и файл struts.xml:
<struts>
<include file="ecs-default.xml"></include>
<!-- define two empty package,/and /manager, extends ecs-default package -->
<package name="default" namespace="/" extends="ecs-default">
</package>
<package name="manager" namespace="/manager" extends="ecs-default">
</package>
</struts>
отлаживать код, в com.opensymphony.xwork2.DefaultActionInvocation
классе, List<InterceptorMapping> interceptorList = new ArrayList<InterceptorMapping>(proxy.getConfig().getInterceptors());
, proxy.getConfig().getInterceptors()
возвращает 18 перехватчики defaultStack определенные ул uts-default.xml, мой перехватчик ecsTimer в нем отсутствует. так почему? Что-то не так в моей конфигурации? Благодарю.
Я использую распорок аннотацию, я просто, как вы сказали, '@ParentPackage (значение = "JSON-умолчанию") @namespace (значение = "/ менеджер") @InterceptorRef (значение = "ecsStack") общественности класс UserSearchAction расширяет ActionSupport' ..., теперь он сообщает об ошибке: не удалось найти класс перехватчика, на который ссылается ref-name ecsStack - [неизвестное местоположение]. так как его решить? этот класс перехватчиков существует точно. – hiway
Я решаю его, см. Http://stackoverflow.com/questions/8600148/how-to-link-custom-interceptor-using-annotation. Я думаю, что аннотация struts2 сложнее, чем xml-конфигурация. Огромное спасибо. – hiway