【问题标题】:Struts2 change form field using interceptorStruts2 使用拦截器更改表单字段
【发布时间】:2020-09-24 15:09:44
【问题描述】:

我是struts2的新手。 在拦截器中,如何更改表单字段的值,然后将其提交到数据库? 例如,当用户在表单中输入 firstName 值时,当它提交时我想更改 firstName 然后将其提交到数据库。

这是我的拦截器的代码

public class TestInterceptor extends AbstractInterceptor implements Interceptor
{

    @Override
    public String intercept(ActionInvocation actionInvocation) throws Exception
    {

        ValueStack stack = actionInvocation.getStack();

        Map<String, Object> params = ActionContext.getContext().getParameters();
        Set<String> keys = params.keySet();

        System.out.println(keys + " " + stack.size());

        /*
         * for (String key : keys)
         * {
         * String[] value = (String[]) params.get(key);
         * System.out.println(value.length + " , " + value[0]);
         * }
         */
        Map<String, Object> context = new HashMap<String, Object>();
        context.put("firstNames", "Changed");
        context.put("firstName", "Changed");
        stack.setParameter("firstName", "Changeds");
        stack.push(context);

        String result = actionInvocation.invoke();

        return result;
    }
}

【问题讨论】:

  • 在我的情况下它不起作用...值没有更新
  • 我得到了答案,在我的代码中,我只需要更改每个循环的值。无需添加任何其他上下文
  • 是错字吗?或者,如果您解决了真正的问题,您可以添加答案。
  • 为什么要在拦截器中这样做?行动似乎是一个更好的地方。

标签: java parameters struts2 struts2-interceptors


【解决方案1】:

在您的代码中,您只需更改地图中的值。无需添加任何其他上下文。

Map<String, Object> params = actionInvocation.getInvocationContext().getParameters();
params.put("firstName", "Changed");

【讨论】:

    【解决方案2】:

    试试这个:

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

    【讨论】:

    • 虽然这段代码可以回答这个问题,但最好包含一些上下文,解释它是如何工作的以及何时使用它。从长远来看,纯代码的答案没有用处。
    猜你喜欢
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2014-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    相关资源
    最近更新 更多