установка параметра url в методе действий в стойках - PullRequest
0 голосов
/ 06 июля 2010

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

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

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

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

Ответы [ 2 ]

5 голосов
/ 06 июля 2010

Короткий ответ: это невозможно.Параметры запроса должны быть из запроса 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;
2 голосов
/ 26 февраля 2015

Я знаю, что это старый и принятый пост, но если вы не можете обновить свои стойки (как я), то это может быть полезно 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;
...