Rest Struts 2模型驱动的操作支持列表和单个项
我继承了一些基于struts2 REST插件的代码,以下构造让我感到困惑: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
@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
我还在寻找最好的解决办法