在 Struts2 拦截器中更改请求参数值
Changing request parameter value in Struts2 interceptor
有人知道是否可以 change/remove 在 Struts2 拦截器中请求参数值吗?
请求参数 Map
是 UnmodifiableMap
的一个实例,因此它看起来不像可以在拦截器中进行操作。
更新:
我正在使用 Liferay,所以 uParamsMap
将是 UnmodifiableMap
public String intercept(ActionInvocation invocation) throws Exception {
final ActionContext context = invocation.getInvocationContext();
PortletRequest request = (PortletRequest) context.get(REQUEST);
Map<String, String[]> uParamsMap = request.getParameterMap();
return invocation.invoke();
}
也许你可以试试这个。
public String intercept(ActionInvocation invocation) throws Exception {
final ActionContext context = invocation.getInvocationContext();
Map<String,Object> parameters = (Map<String,Object>)context.get(ActionContext.PARAMETERS);
Map<String, Object> parametersCopy = new HashMap<String, Object>();
parametersCopy.putAll(parameters);
parametersCopy.put("myParam", "changedValue");
context.put(ActionContext.PARAMETERS, parametersCopy);
return invocation.invoke();
}
我的代码中遇到了类似的问题,但上面的解决方案对我不起作用。
如果您想在拦截器到达操作之前更改拦截器中的任何参数class,请使用此代码:
@Override
public String intercept(ActionInvocation ai) throws Exception {
ValueStack stack=ai.getStack();
Iterator it = stack.getRoot().iterator();
while( it.hasNext() )
{
Object objecto = it.next();
//LoginUsuario is my action class
if( objecto instanceof LoginUsuario )
{
LoginUsuario usuario = (LoginUsuario)objecto;
usuario.setUsername( usuario.getUsername().toUpperCase() );
usuario.setPassword( usuario.getPassword().toUpperCase() );
}
}
return ai.invoke();
}
有人知道是否可以 change/remove 在 Struts2 拦截器中请求参数值吗?
请求参数 Map
是 UnmodifiableMap
的一个实例,因此它看起来不像可以在拦截器中进行操作。
更新:
我正在使用 Liferay,所以 uParamsMap
将是 UnmodifiableMap
public String intercept(ActionInvocation invocation) throws Exception {
final ActionContext context = invocation.getInvocationContext();
PortletRequest request = (PortletRequest) context.get(REQUEST);
Map<String, String[]> uParamsMap = request.getParameterMap();
return invocation.invoke();
}
也许你可以试试这个。
public String intercept(ActionInvocation invocation) throws Exception {
final ActionContext context = invocation.getInvocationContext();
Map<String,Object> parameters = (Map<String,Object>)context.get(ActionContext.PARAMETERS);
Map<String, Object> parametersCopy = new HashMap<String, Object>();
parametersCopy.putAll(parameters);
parametersCopy.put("myParam", "changedValue");
context.put(ActionContext.PARAMETERS, parametersCopy);
return invocation.invoke();
}
我的代码中遇到了类似的问题,但上面的解决方案对我不起作用。
如果您想在拦截器到达操作之前更改拦截器中的任何参数class,请使用此代码:
@Override
public String intercept(ActionInvocation ai) throws Exception {
ValueStack stack=ai.getStack();
Iterator it = stack.getRoot().iterator();
while( it.hasNext() )
{
Object objecto = it.next();
//LoginUsuario is my action class
if( objecto instanceof LoginUsuario )
{
LoginUsuario usuario = (LoginUsuario)objecto;
usuario.setUsername( usuario.getUsername().toUpperCase() );
usuario.setPassword( usuario.getPassword().toUpperCase() );
}
}
return ai.invoke();
}