Struts2 除了变量名匹配之外,是否还需要Struts setter?

Struts2 除了变量名匹配之外,是否还需要Struts setter?,struts2,struts,setter,Struts2,Struts,Setter,我有一个模型驱动的Struts Web操作: public class ModelDrivenAction<T extends Object> implements ModelDriven<T>, Preparable { protected Long id; protected T model; @Override public void prepare() {} public void setId(Long id) { this.id = i

我有一个模型驱动的Struts Web操作:

public class ModelDrivenAction<T extends Object> implements ModelDriven<T>, Preparable {

  protected Long id;
  protected T model;

  @Override
  public void prepare() {}

  public void setId(Long id) { this.id = id; }

  @Override
  public T getModel() { return model; }

  public void setModel(T model) { this.model = model; }
}
我希望做到这一点,并希望尽可能避免跟踪JavaScript中传递操作的modelId参数而不是id的所有实例。我认为这可能有效,因此可以传入modelId或id:

public class OtherAction extends ModelDrivenAction<ModelObj> {

  @Override
  public void prepare() { model = repoService.retrieveModelById(id); }

  public void setModelId(Long modelId) { this.id = modelId; }
}

但是,服务器/path/to/other!方法?modelId=123无法设置id。我认为只要setter匹配参数名,Struts拦截器就会在操作调用时调用它。我在这里遗漏了什么吗?

设置id的失败是由于Eclipse中的错误配置造成的;上面列出的代码实际上实现了我的期望。

我听说,甚至没有要求有一个备份字段,更不用说它的名称与其setter匹配了……您正在处理的这个框架是什么要求它的?@cHao:JavaBeans不是这样吗?@Oli:不是。bean要求将setter命名为getFoo和setFoo。它们不要求有一个私有的int-foo来匹配。@Oli Charlesworth它可能/可能不是JavaBeans的原因,但slk没有使用JavaBeans标记或以其他方式指定它。绝对没有对java setter的要求——因为它不是一个java概念。
public class OtherAction extends ModelDrivenAction<ModelObj> {

  @Override
  public void prepare() { model = repoService.retrieveModelById(id); }

  public void setModelId(Long modelId) { this.id = modelId; }
}