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

Changing request parameter value in Struts2 interceptor

有人知道是否可以 change/remove 在 Struts2 拦截器中请求参数值吗?

请求参数 MapUnmodifiableMap 的一个实例,因此它看起来不像可以在拦截器中进行操作。

更新:

我正在使用 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();
}