Rest Struts 2模型驱动的操作支持列表和单个项

Rest Struts 2模型驱动的操作支持列表和单个项,rest,struts2,Rest,Struts2,我继承了一些基于struts2 REST插件的代码,以下构造让我感到困惑: @Namespace("/merchants/{id}") public class MerchantAction extends ActionSupport implements ModelDriven<Object> { private Merchant merchant = new Merchant(); // A Model private Iterable<Merchant> merch

我继承了一些基于struts2 REST插件的代码,以下构造让我感到困惑:

@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));
}
@名称空间(“/merchants/{id}”)
公共类MerchantAction扩展ActionSupport实现ModelDriven{
私人商户=新商户();//模型
私有Iterable商户;//模型列表
.... 
公共HttpHeaders索引(){
商户=merchantService.findAllMerchants();
返回新的DefaultHttpHeaders(“索引”);
}
@凌驾
公共对象getModel(){
退货(商户!=null?商户:商户);
}
公共无效集合id(字符串id){
商户=merchantService.findMerchant(id));
}

换句话说,在getModel()调用中,它似乎在返回列表和返回单个项目之间切换。这是否符合犹太教义?我觉得有点奇怪

我考虑过你的方法,但最终放弃了。在我看来,它失去了强类型操作的优势

我的解决方案是,为每个操作创建一个
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;
    }
}
公共类UserViewModel实现IViewModel{
私有用户模型;
私人名单;
公共void集合模型(用户){
this.model=用户;
}
公共用户getModel(){
收益模型;
}
公共无效集合列表(列表){
this.list=列表;
}
公共列表getList(){
退货清单;
}
}
行动如下:

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;
    }
}
公共类UserController实现模型驱动{
私有int-id;
private UserViewModel model=new UserViewModel();
公共字符串索引(){
返回“成功”;
}
公共字符串显示(){
返回“成功”;
}
公共无效集合id(内部id){
this.id=id;
}
公共int getId(){
返回此.id;
}
@凌驾
public UserViewModel getModel(){
收益模型;
}
}
但是这样,我仍然失去了jsp文件中的快捷方式。我应该编写长
model.userName
,而不是短
userName

我还在寻找最好的解决办法