有人知道是否可以在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();
}
答案 0 :(得分:4)
可能你可以试试这个。
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();
}
答案 1 :(得分:0)
我的代码中遇到了类似的问题,但上面的解决方案对我不起作用。
如果要在拦截器到达动作类之前对其中的任何参数进行更改,请使用以下代码:
@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();
}