struts 2 Model-Driven


アクションの属性によって、Field-Driven(プロパティ駆動)アクションとModel-Driven(モデル駆動)アクションに分けられます。
一、Field-Driven(属性駆動)アクション、アクションは自分の属性を持っています。これらの属性は主にJavaの基本タイプです。フォームフィールドは直接、アクションの属性に対応します。
二、モデルDrivenインターフェースがactionで直接にUserオブジェクトを獲得できるようになりました。Object get Model()で取得したUserをValueStockに入れます。このUserの属性をアクションに追加すると理解できる。これは主にStrutsのようなFormBen機能を実現する役割です。
struts 2では、フィールドオブジェクトを直接使用する方法を提供しています。つまり、actionにcompensymphone.xwork 2.ModelDrivenインターフェースを実現させ、ModelDrivenはアプリケーションの分野オブジェクトを直接操作して、ウェブ層と業務層で同じオブジェクトを使用できるようにします。
ModelDrivenインターフェースは一つの方法しかありません。

        public Object getModel() { 
        return null; 
} 
この方法は、ユーザの入力データを受信するためのオブジェクトモデルを返します。このモデルオブジェクトの属性は、直接(属性名)userNameを通じてアクセスできます。(オブジェクト名.属性名)user.userNameという形式でアクセスする必要はありません。actionでは、オブジェクトにgetterやsetter方法を提供する必要はありませんが、actionでnew操作を行う必要があります。
次のとおりです
//ModelDrivenは汎型を使いますよ。

public class LoginAction extends ActionSupport implements ModelDriven<User>{ 

private static final long serialVersionUID = -6434128483294080524L; 

//     new 
private User user=new User(); 
public String login() throws Exception { 
   // TODO Auto-generated method stub  
   return SUCCESS; 
} 

//          

@Override 
public User getModel() { 
   // TODO Auto-generated method stub 

//    ,         
   return user; 
} 
} 
このようにModelDriven一つで実現しました。
属性駆動のアクションとは大きな違いがあります。以下に挙げます。
(1)モデル駆動のアクションはModelDrivenインターフェースを実現しなければなりません。そして対応する汎型を提供します。ここではもちろん、具体的に使うJava Beanです。
(2)ModelDrivenのget Model方法を実現するということは、単純に汎型のオブジェクトに戻るということです。
(3)アクションでは一般的なプライベートオブジェクトを提供し、ここではUserのuserオブジェクトを定義し、対応するgetterとsetterを提供する。
はい、上の三つのことが終わったら、アクションは自動的にUserのsetterを呼び出してフォームの中のname属性の値をUserの中の属性に割り当てます。なお、アクションの後続処理のJspページは、Servletであり、userオブジェクトを使用することができる。
属性駆動とモデル駆動ですか?
この問題は多くの初心者に迷惑をかけました。ここでいくつかのアドバイスを提供します。
(1)システム全体のアクションで使用するドライバモデルを統一してください。すなわち、属性で駆動するか、モデルで駆動します。
(2)あなたのDBの耐久層のオブジェクトとフォームの属性が一対一であれば、モデルを使って駆動しましょう。コードはかなり綺麗に見えます。
(3)フォームの属性が1つに対応していないなら、属性駆動を使用しなければならない。そうでなければ、あなたのシステムは2つのBeanを提供しなければならない。1つの対応フォームが提出したデータは、もう1つは耐久層と使用しなければならない。