2014-11-09 4 views
0

Как добавить список параметров excludeMethods для моего пользовательского перехватчика в файле struts.xml. workflow и validation перехватчик имеют этот параметр excludeMethods через то есть ведьма workflow перехватчик не будет срабатывать для исключенных методов, как описано, как это:Как добавить список параметров excludeMethods для пользовательского перехватчика в struts2

<action name="action" class="abc.ActionClass"> 
<interceptor-ref name="defaultStack"> 
<param name="workflow.excludeMethods">doSomething</param> 
</interceptor-ref> 
<result>Success.jsp</result> 
</action> 

Это я знаю. Я хочу знать, как я могу сделать то же самое для своего пользовательского перехватчика. Я попытался, но потерпел неудачу. Вот мой код:

index.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<%@ taglib uri="/struts-tags" prefix="s" %>  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Insert title here</title> 
</head> 
<body> 
<s:url action="go2" method="forGo2" var="v_go2"/> 
<a href="<s:property value='#v_go2'/>">HIT to check if excludeMethods parameter working or NOT.</a> 
</body> 
</html> 

struts.xml

<?xml version="1.0" encoding="UTF-8"?> 


<!DOCTYPE struts PUBLIC 
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" 
    "http://struts.apache.org/dtds/struts-2.3.dtd"> 

<struts> 
<package name="abc" extends="struts-default"> 

<interceptors> 

<interceptor name="cust_intrcptr" class="pack.MyInterceptor2"> 
<param name="excludeMethods">forGo2</param> <!-- parameter for excluded method --> 
</interceptor> 

<interceptor-stack name="mystack2"> 
<interceptor-ref name="defaultStack"/> 
<interceptor-ref name="cust_intrcptr"/> 
</interceptor-stack> 

</interceptors> 

<action name="go2" class="pack.GoAction" method="forGo2"> 
<interceptor-ref name="mystack2"/> 
<result name="success">/welcome2.jsp</result> 
</action> 
</package> 
</struts> 

заказ перехватчик

package pack; 

import com.opensymphony.xwork2.ActionInvocation; 
import com.opensymphony.xwork2.interceptor.Interceptor; 

public class MyInterceptor2 implements Interceptor{ 

    @Override 
    public void destroy() { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void init() { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public String intercept(ActionInvocation ai) throws Exception { 
     // TODO Auto-generated method stub 
     System.out.println("#####Inside Interceptor#####"); 
     ai.invoke(); 
    } 

} 

Действие Класс

package pack; 

import com.opensymphony.xwork2.ActionSupport; 

public class GoAction extends ActionSupport{ 
    public String forGo2(){ 
     return "success"; 
    } 
} 

Выход генерируется без каких-либо ошибок. Но в консольном выпуске я просматриваю «#####Inside Interceptor#####», которого я не ожидал, потому что я исключил перехватчик для метода forGo2. Как я могу исключить этот перехватчик для любого данного метода в этом случае, например forGo2.

ответ

2

Для этого есть определенный базовый класс: MethodFilterInterceptor. Из документации:

Реферат Перехватчик, который применяется к выборочно согласно указанным спискам включенных/исключенных включенных/исключенных.

Чтобы использовать, сначала расширить его в перехватчик:

public class MyInterceptor2 extends MethodFilterInterceptor { 

Теперь вместо переопределения метода intercept, переопределить doIntercept:

@Override 
public String doIntercept(ActionInvocation ai) throws Exception { 
    // TODO Auto-generated method stub 
    System.out.println("#####Inside Interceptor#####"); 
    ai.invoke(); 
} 

Базовый класс будет обрабатывать excludeMethods автоматически и при необходимости вызовите doIntercept.

+0

он решил мою проблему. Спасибо Большое. – JPG

Смежные вопросы