java – 在Struts 2中获取拦截器参数
我有以下动作映射
<action name="theAction" ...> ... <param name="param1">one</param> <param name="param2">two</param> ... <param name="paramN">nth-number</param> ... </action> 我可以在Interceptor中使用以下行获取参数映射 Map<String,Object> params = ActionContext.getContext().getParameters(); 如上所述,是否有任何方法可以获得以下映射中定义的拦截器参数. <action name="theAction" ...> ... <interceptor-ref name="theInterceptor"> <param name="param1">one</param> <param name="param2">two</param> ... <param name="paramN">nth-number</param> </interceptor-ref> ... </action> 并且动作参数以下列方式定义,动作参数和拦截器参数应该可以单独访问. <action name="theAction" ...> ... <param name="param1">one</param> <param name="param2">two</param> ... <param name="paramN">nth-number</param> .... <interceptor-ref name="theInterceptor"> <param name="param1">one</param> <param name="param2">two</param> ... <param name="paramN">nth-number</param> </interceptor-ref> ... </action> 请注意,我不想在拦截器中声明参数字段 //all fields with their getters and setters private String param1; private String param2; ... private String paramN; 在Dev Blanked’s asnwer之后,我实施了他的技术.它没有用,所以我在这里分享我的代码.我正在使用Struts 2.3.1.2. 图书馆 > asm-3.3.jar 在struts.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <constant name="struts.devMode" value="true" /> <package name="the-base" namespace="/" extends="struts-default" abstract="true"> <interceptors> <interceptor name="header" class="demo.interceptors.HttpHeaderInterceptor"></interceptor> <interceptor-stack name="theStack"> <interceptor-ref name="defaultStack"></interceptor-ref> <interceptor-ref name="header"></interceptor-ref> </interceptor-stack> </interceptors> <default-interceptor-ref name="theStack"></default-interceptor-ref> </package> <package name="the-module" extends="the-base"> <action name="theAction"> <result>/the-action.jsp</result> <interceptor-ref name="theStack"> <param name="header.Cache-control">no-store,no-cache</param> <param name="header.Pragma">no-cache</param> <param name="header.Expires">-1</param> <param name="header.arbitrary">true</param> </interceptor-ref> </action> </package> </struts> 拦截器 package demo.interceptors; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import javax.servlet.http.HttpServletResponse; import org.apache.struts2.StrutsStatics; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.AbstractInterceptor; public class HttpHeaderInterceptor extends AbstractInterceptor { private final Map<String,String> interceptorConfigs = new HashMap<String,String>(); @Override public String intercept(ActionInvocation invocation) throws Exception { System.out.println("Calling 'intercept' method."); HttpServletResponse response = (HttpServletResponse) invocation.getInvocationContext().get(StrutsStatics.HTTP_RESPONSE); for(Entry<String,String> entry: interceptorConfigs.entrySet()) { String header = entry.getKey(); String value = entry.getValue(); System.out.printf("Adding header: %s=%sn",header,value); response.setHeader(header,value); } return invocation.invoke(); } public Map<String,String> getInterceptorConfigs() { System.out.println("calling method 'getInterceptorConfigs'"); return interceptorConfigs; } public void addInterceptorConfig(final String configName,final String configValue) { System.out.printf("Calling method 'addInterceptorConfig' with params configName = %s,configValue=%.n",configName,configValue); interceptorConfigs.put(configName,configValue); } } 触发动作时的控制台输出. Calling 'intercept' method. 解决方法
在您的自定义拦截器中,您可以定义如下所示的地图
private final Map<String,String>(); public Map<String,String> getInterceptorConfigs() { return interceptorConfigs; } public void addInterceptorConfig(final String configName,final String configValue) { interceptorConfigs.put(configName,configValue); } 然后在你的动作映射中你可以传递如下的参数..这些将存储在拦截器的地图中 <action name="yourAction" class="your.actionClass"> <result name="success">some.jsp</result> <interceptor-ref name="defaultStack"> <param name="yourInterceptor.interceptorConfigs.key">value</param> <param name="yourInterceptor.interceptorConfigs.aParamName">paramValue</param> </interceptor-ref> </action> “yourInterceptor”指的是在将拦截器添加到struts.xml时给出的拦截器的名称.当配置如上所述’interceptorConfigs’时,拦截器内的地图将具有键/值对. 如果要使这些可用于您的操作,您只需将映射设置为ActionContext中的上下文变量即可.然后可以在操作中检索它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |