Как передать переменную от одного actionbean другому? - PullRequest
2 голосов
/ 16 августа 2011

В настоящее время у меня есть форма Stripes с кнопкой отправки, которая связана с методом "search" следующего ActionBean:

public class SearchRepairActionBean extends BaseActionBean {
  private String searchType;
  private String searchValue;

  @DefaultHandler   
  public Resolution defaultHandler(){
    return null;
  }

  @HandlesEvent("search")
  public Resolution search(){   
    return new ForwardResolution("SearchRepairResult.action").addParameter("searchType", searchType).addParameter("searchValue", searchValue);;
  }

  public String getSearchType() {
    return searchType;
  }

  public void setSearchType(String searchType) {
    this.searchType = searchType;
  }

  public String getSearchValue() {
    return searchValue;
  }

  public void setSearchValue(String searchValue) {
    this.searchValue = searchValue;
  }
}

И SearchRepairResultActionBean пытается разрешить его следующим образом:

public class SearchRepairResultActionBean extends BaseActionBean {
private String searchType;
private String searchValue;

@DefaultHandler 
public Resolution defaultHandler(){
    return new ForwardResolution("/jsp/searchRepairResult.jsp");
}

@HandlesEvent("SearchRepairResult")
public Resolution SearchRepairResult(){
    System.out.println(searchType);
    System.out.println(searchValue);    
    }
public String getSearchType() {
    return searchType;
}

public void setSearchType(String searchType) {
    this.searchType = searchType;
}

public String getSearchValue() {
    return searchValue;
}

public void setSearchValue(String searchValue) {
    this.searchValue = searchValue;
}
}

Проблема в том, что я пытаюсь напечатать "searchType" и "searchValue" - они возвращают ноль. Я неправильно передаю параметры? Каков наилучший способ сделать это?

Ответы [ 2 ]

1 голос
/ 01 сентября 2011

Почему вы получаете type и value по телефону getContext().getRequest().getParameter()? Вы должны иметь возможность просто иметь методы на SearchRepairResultActionBean, например:

public void setType(String type) {
    this.type = type;
}

public void setValue(String value) {
    this.value = value;
}

И тогда Stripes вставит необходимые значения (как часть LifecycleStage.BindingAndValidation) перед вызовом вашего метода события.

Собственно, почему вы отделяете SearchRepairActionBean от SearchRepairResultActionBean? Если на странице «Результаты» необходимо просмотреть данные, полученные из формы, которая была отправлена ​​в событие search, то почему бы просто не выполнить действие в методе search() для SearchRepairActionBean, а затем выполнить ForwardResolution на ваш взгляд? Есть ли конкретная причина для использования двух ActionBeans здесь?

1 голос
/ 17 августа 2011

Конечно, вы можете передать параметр.

Есть несколько других возможностей, но это, вероятно, ваш лучший случай, когда вы не видите точный код.Вы, возможно, пропустили это, поскольку это на самом деле метод суперкласса (OnwardResolution).

Он может быть цепным, поэтому при необходимости его можно вызывать несколько раз подряд.

return new ForwardResolution(BarActionBean.class,"barevent").addParameter("ducks",ducks);

Javadoc: public T addParameters (Параметры карты)

...