如何在excludeMethods
文件中为我的自定义拦截器添加struts.xml
参数列表。
workflow
和validation
拦截器具有此参数,即excludeMethods
,workflow
拦截器不会针对排除的方法触发,如下所述:
<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";
}
}
生成的输出没有任何错误。但在控制台输出中,我正在查看&#34; #####Inside Interceptor#####
&#34;我没想到的,因为我排除了forGo2
方法的拦截器。在这种情况下,如何针对任何给定方法排除此拦截器,如forGo2
。
答案 0 :(得分: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
。