0

私はいくつかのstruts2RESTプラグインベースのコードを継承しましたが、次の構成は私を困惑させます:

@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()呼び出しでリストを返すことと個々のアイテムを返すことを切り替えているようです。これはコーシャですか?私には少し奇妙に見えます

4

1 に答える 1

0

私はあなたのアプローチを検討しましたが、最終的にあきらめました。IMO、強い型付きアクションの利点を失いました。

私の解決策は、ViewModelfor each アクションを作成することです。ビューモデルには、単一のモデル、モデルのリスト、およびドロップダウンリストやラジオボタンのアイテムなど、ページの使用に関するその他のアイテムが含まれる場合があります。

したがって、次の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です。

私はまだそれの最善の解決策を見つけています。

于 2013-03-13T06:58:47.250 に答える