Я следующее отображение действийПолучение Interceptor параметров в Struts 2
<action name="theAction" ...>
...
<param name="param1">one</param>
<param name="param2">two</param>
...
<param name="paramN">nth-number</param>
...
</action>
я могу получить карту параметров, используя следующую строку в перехватчик
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;
После asnwer Dev гасятся, я реализовал свой метод. Это не сработало, поэтому я делюсь своим кодом здесь. Я использую Struts 2.3.1.2.
Библиотеки
- ASM-3.3.jar
- ASM-Обще-3.3.jar
- ASM-дерево-3.3.jar
- Обще-FileUpload-1.2.2.jar
- Обще-ю-2.0.1.jar
- Обще-Ланг-2.5.jar
- FreeMarker-2.3.18.jar
- Javassist-3.11.0.GA.jar
- OGNL-3.0.4.jar
- struts2-ядро-2.3.1.2.jar
- xwork-ядро-2,3 .1.2.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=%s\n",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);
}
}
Console Output когда theAction
ударил.
Calling 'intercept' method.
Возможно с параметром списка внутри перехватчика. Что-то вроде этого вопроса: http://stackoverflow.com/q/14474492/1700321. –
Непонятно, чего вы пытаетесь достичь: | –
@ Аndrea Ligios, я отредактировал мой вопрос. Однако моя цель - получить карту параметров, определенную внутри тела тега '. –