在Struts2拦截器中更改请求参数值

有人知道是否可以在Struts2拦截器中更改/删除请求参数值?

请求参数MapUnmodifiableMap一个实例,因此看起来它不能在拦截器中操作。

更新:

我正在使用Liferay,所以uParamsMap将是一个UnmodifiableMap

 public String intercept(ActionInvocation invocation) throws Exception { final ActionContext context = invocation.getInvocationContext(); PortletRequest request = (PortletRequest) context.get(REQUEST); Map uParamsMap = request.getParameterMap(); return invocation.invoke(); } 

也许你可以试试这个。

 public String intercept(ActionInvocation invocation) throws Exception { final ActionContext context = invocation.getInvocationContext(); Map parameters = (Map)context.get(ActionContext.PARAMETERS); Map parametersCopy = new HashMap(); parametersCopy.putAll(parameters); parametersCopy.put("myParam", "changedValue"); context.put(ActionContext.PARAMETERS, parametersCopy); return invocation.invoke(); } 

我的代码中有类似的问题,但上面的解决方案对我不起作用。

如果要在拦截器到达动作类之前对其中的任何参数进行更改,请使用以下代码:

 @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(); }