如何将变量从一个actionbean传递到另一个?

时间:2011-08-15 22:28:37

标签: parameter-passing stripes

目前,我有一个带有提交按钮的Stripes表单,该按钮绑定到以下ActionBean的“search”方法:

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”时 - 它们返回null。我传递的参数不正确吗?这样做的最佳方式是什么?

2 个答案:

答案 0 :(得分:1)

当然可以传递参数。

还有其他几种可能性,但如果没有看到确切的代码,这可能是最好的情况。您可能错过了它,因为它实际上是超类(OnwardResolution)的一种方法。

它是可链接的,因此如有必要,您可以连续多次调用它。

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

Javadoc:public T addParameters(Map parameters)

答案 1 :(得分:1)

为什么通过致电type来获得valuegetContext().getRequest().getParameter()?您应该能够像SearchRepairResultActionBean一样拥有方法:

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

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

然后Stripes会在调用您的事件方法之前注入必要的值(作为LifecycleStage.BindingAndValidation的一部分)。

实际上,就此而言,为什么要将SearchRepairActionBeanSearchRepairResultActionBean分开?如果“结果”页面需要查看来自提交到search事件的表单的数据,那么为什么不在search()上的SearchRepairActionBean方法中执行操作,然后对你的观点进行ForwardResolution吗?在这里使用两个ActionBeans是否有特殊原因?