2010-07-06 4 views
0

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

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

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

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

ответ

5

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

Update

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

import org.apache.struts.action.ActionRedirect; 
... 
ActionForward forward = action.forward("action_name"); 
ActionRedirect redirect = new ActionRedirect(forward); 
redirect.addParameter("color", "red"); 
return redirect; 
+0

Да, я знаю, что могу сделать это с помощью фильтров, но это слишком много работы для настройки параметра URL. – CoolBeans

+0

Почему вы не можете использовать setAttribute для объекта запроса? – laz

+0

Поскольку фильтр, который изменяет цвет страницы, нуждается в этом как параметр запроса. Я подумал об этом совсем немного, я не понимаю, как это решить, не добавляя параметры url через java-скрипт. – CoolBeans

2

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

Приобретено, спасибо! – CoolBeans