Struts2 изменяет поле формы с помощью перехватчика

Я новичок в 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;
    }
}

person Question Warriors    schedule 18.02.2016    source источник
comment
Возможный дубликат Изменение значения параметра запроса в перехватчике Struts2   -  person Arun Xavier    schedule 18.02.2016
comment
В моем случае это не работает... Значение не обновляется   -  person Question Warriors    schedule 18.02.2016
comment
Я получил ответ, в моем коде мне просто нужно изменить значение для каждого цикла. нет необходимости помещать любой другой контекст   -  person Question Warriors    schedule 18.02.2016
comment
это была опечатка? или вы можете добавить ответ, если вы исправили реальную проблему.   -  person Arun Xavier    schedule 18.02.2016
comment
Почему вы делаете это в перехватчике? Действие кажется лучшим местом для этого.   -  person Aleksandr M    schedule 18.02.2016


Ответы (2)


В вашем коде вам просто нужно изменить значение на карте. нет необходимости помещать любой другой контекст.

Map<String, Object> params = actionInvocation.getInvocationContext().getParameters();
params.put("firstName", "Changed");
person Roman C    schedule 18.02.2016

Попробуй это:

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();
}
person Piyush    schedule 24.09.2020
comment
Хотя этот код может ответить на вопрос, было бы лучше включить некоторый контекст, объясняющий, как он работает и когда его использовать. Ответы, содержащие только код, в долгосрочной перспективе бесполезны. - person 7uc1f3r; 24.09.2020