установка параметра URL в методе действия в struts

Я хочу добавить параметр URL перед пересылкой в ​​другое действие из метода действия. Хотя HttpServletRequest имеет метод getParameter(), у него нет метода setParameter(). Я знаю, что setAttribute() существует, но мне нужно, чтобы он был частью URL-адреса (например, ?something=something&some2=some2). Я знаю, что могу сделать это с помощью фильтров, но это слишком много для этой задачи.

По сути, у нас есть управляемый извне фильтр, который что-то меняет на странице, когда этот параметр установлен. Допустим, цвет страницы будет передан как часть параметра URL. Когда этот параметр присутствует, фильтр сервлета подбирает его и меняет цвет этой страницы. Я знаю, что это очень странный способ, но так устроено здесь.

Я знаю, как заставить его работать, используя отправку формы на основе java-скрипта, добавив параметр URL к URL-адресу действия (т.е. "/someAction.do?color=red"). Но для некоторых действий он фактически выполняет action.forward("action_name") в коде. Для тех, кому было интересно, что делать.

Кто-нибудь знает, как это сделать в struts 1.2?


person CoolBeans    schedule 06.07.2010    source источник


Ответы (2)


Короткий ответ: это невозможно. Параметры запроса должны быть взяты из HTTP-запроса. Вы можете имитировать их добавление, используя комбинацию ServletFilter и HttpServletRequestWrapper, но это вне Struts. В зависимости от того, чего вы пытаетесь достичь, может быть лучшее решение. Хотите описать это немного подробнее?

Обновить

С добавленными вами дополнительными деталями, я думаю, вы можете попробовать это, чтобы увидеть, соответствует ли оно вашим потребностям:

import org.apache.struts.action.ActionRedirect;
...
ActionForward forward = action.forward("action_name");
ActionRedirect redirect = new ActionRedirect(forward);
redirect.addParameter("color", "red");
return redirect;
person laz    schedule 06.07.2010
comment
Да, я знаю, что могу сделать это с помощью фильтров, но это слишком много работы для простой установки параметра URL. - person CoolBeans; 06.07.2010
comment
Почему вы не можете использовать setAttribute для объекта запроса? - person laz; 07.07.2010
comment
Потому что он нужен фильтру, меняющему цвет страницы, как параметр запроса. Я много думал об этом, я не вижу, как это решить, не добавляя параметры URL-адреса через java-скрипт. - person CoolBeans; 07.07.2010
comment
Я только что увидел, что вы отредактировали свой вопрос раньше и добавили больше деталей. Я обновлю свой ответ. - person laz; 07.07.2010
comment
Я думаю, что org.apache.struts.action.ActionRedirect недоступен в struts 1.2, если только я не делаю что-то глупое. - person CoolBeans; 08.07.2010
comment
Похоже, это было добавлено в 1.2.7. См. struts.apache.org/1.2.9. /api/org/apache/struts/action/ - person laz; 08.07.2010
comment
Да, но мне нравится ваше решение. Спасибо, Яз! - person CoolBeans; 09.07.2010

Я знаю, что это старый и принятый пост, но если вы не можете обновить свои стойки (как я), то это может быть полезно http://www.coderanch.com/t/45890/Struts/Adding-parameters-struts-action

import org.apache.struts.action.ActionForward;
public class ParameterizedForward extends ActionForward
{
    public ParameterizedForward(ActionForward forward)
    {
        super(forward.getPath(), forward.getRedirect());
    }
    public void addParameter(String key, String value)
    {
        StringBuffer sb = new StringBuffer(getPath());
        if (key == null || key.length() < 1)
            return;
        if (getPath().indexOf('?') == -1)
            sb.append('?');
        else
            sb.append('&');
        sb.append(key + "=" + value);
        setPath(sb.toString());
    }
}

ParameterizedForward fwd = new ParameterizedForward(mapping.findForward("success"));
fwd.addParameter("name","jason");
fwd.addParameter("userLevel", "god");
return fwd;
person davibq    schedule 25.02.2015