2010-11-18 19 views
1

私はstruts2の実際の動作からstruts2を学習しています。彼らはオブジェクトにデータを転送するためにモデル駆動型のアクションは、オブジェクトをバックアップしたBeanのプロパティよりも好まれていると彼らは言います。オブジェクト駆動型のBeanプロパティよりもモデル駆動型の操作が好ましい理由

いくつか私は彼らがなぜそう言っているのか説明できますか?

理由は、あなたがこれらのプロパティを保持するオブジェクトを使用していくつかのプロパティ、本の支持者を扱うのではなく、持っている場合には、ビュー層

答えて

6

に参照名を言及する必要性とは何かを持っていますあなたのために物事をより簡単にするためのアクションに直接参加してください。以下の実施例検討:第2の例では

public class CreateNewWidgetAction extends ActionSupport { 
    private String property1; 
    private String property2; 
    private Long property3; 
    ... 

    public String execute() throws Exception { 
     Widget widget = new Widget(); 
     // set properties on widget 
    } 

    // getters and setters for properties here 
} 

public class CreateNewWidgetAction extends ActionSupport { 
    private Widget widget; 

    public String execute() throws Exception { 
     // sub properties for widget were already set, less work to do here 
    } 

    // getter and setter for widget here (or the 
    // getModel method if you are using the Model Driven approach) 
} 

を、我々は(ウィジェットプロパティ1、property2、及びproperty3を有していると仮定して)ウィジェットに直接プロパティを設定します。

多くのプロパティを扱っている例では、これがコードを単純化する方法が分かります。

更新日: をあなたはModelDrivenを実装することを選択した場合、あなたの行動は、単一のモデルによって駆動されているので、あなたは、さらになど、property1property2property3としてフォームで上記の特性を参照します、すべてのフォームパラメータモデルの子どもとみなされる。

あなたは、あなたがwidget.property1としてフォーム、widget.property2widget.property3、上記の特性を参照しますModelDrivenを実装しないことを選択した場合など、このアプローチの利点は、あなたが対応していない行動上の他の性質を持つことができるということですウィジェットのプロパティに追加します。

それ以外は違いはありません。実際、この本は次のようにも言います:

オブジェクトバックアップされたJavaBeansプロパティと同様に、ModelDrivenアクションは複雑なJavaオブジェクトを使用してデータを受け取ることもできます。これらの2つの方法の違いはわずかであり、一方を選択するには機能的な結果はありません。

- Struts 2の動作、第3章Struts 2操作の操作>オブジェクトへのデータの転送 - Pg。駆動62

+0

私は利益を理解しました。オブジェクト指向のBean(どちらもオブジェクト内のデータを保持するために使用されている)よりも、モデル駆動型の動作が優れている方法です。 – SonOfTheEARTh

+0

彼らは良くありません。ちょうど代替。私はそれを反映するために私の答えを更新しました。 –

2

ウェルモデルでは、ユーザーの豆を持っているし、それはあなたがuser.nameような何かをしなければならないのJSP側でnameプロパティデンを持っている場合は、たとえば、ネストプロパティ を持っている場合に関して優れているので、 OGNLはあなたがユーザオブジェクトを指し示しており、その名前プロパティの中にいることを知ることができます。

モデル駆動型インターフェースの場合、このインターフェースはvalueスタックの最上位にあり、user.nameのようなものを実行する必要がないため、リクエストがアクションのために来たときに値スタックの先頭にBeanオブジェクトを配置します。あなたのJSPで

私はそれがあなたの質問に答えることを望みます。

関連する問題