我继承了一些基于struts2 REST-plugin的代码,以下构造让我感到困惑:
@Namespace("/merchants/{id}")
public class MerchantAction extends ActionSupport implements ModelDriven<Object> {
private Merchant merchant = new Merchant(); // A Model
private Iterable<Merchant> merchants; // A list of models
....
public HttpHeaders index() {
merchants = merchantService.findAllMerchants();
return new DefaultHttpHeaders("index");
}
@Override
public Object getModel() {
return (merchant != null ? merchant : merchants);
}
public void setId(String id) {
merchant = merchantService.findMerchant(id));
}
换句话说,它似乎是在返回列表和返回getModel()调用中的单个项之间切换。这是犹太人吗?看起来有点奇怪
答案 0 :(得分:0)
我考虑过你的方法,但终于放弃了。国际海事组织,它失去了强大的行动的优势。
我的解决方案是,为每个操作创建一个ViewModel
。在视图模型中,可以有单个模型,模型列表以及其他用于页面使用的项目,例如下拉列表或单选按钮的项目。
所以UserViewModel
就像:
public class UserViewModel implements IViewModel<User> {
private User model;
private List<User> list;
public void setModel(User user) {
this.model = user;
}
public User getModel() {
return model;
}
public void setList(List<User> list) {
this.list = list;
}
public List<User> getList() {
return list;
}
}
行动就像:
public class UserController implements ModelDriven<UserViewModel> {
private int id;
private UserViewModel model = new UserViewModel();
public String index() {
return "success";
}
public String show() {
return "success";
}
public void setId(int id) {
this.id = id;
}
public int getId() {
return this.id;
}
@Override
public UserViewModel getModel() {
return model;
}
}
但是这样,我仍然失去了jsp文件中的快捷方式。我应该写长model.userName
而不是短userName
。
我仍然在寻找最佳解决方案。