2010-11-18 1 views
1

J'apprends struts2 à partir du livre struts-2 en action. ils disent que pour le transfert de données sur des objets, les actions pilotées par le modèle sont préférées aux propriétés des beans sauvegardés par des objets.Pourquoi l'action pilotée par le modèle est-elle préférée aux propriétés du bean sauvegardé par l'objet

peut-il m'expliquer pourquoi ils le disent?

ne la raison ont quelque chose à voir avec la nécessité de mentionner le nom de référence dans la couche de vue

Répondre

6

Dans le cas où vous traitez plusieurs propriétés, les défenseurs du livre à l'aide d'un objet pour maintenir ces propriétés, plutôt que d'avoir les directement sur l'action pour rendre les choses plus faciles pour vous. Prenons les exemples suivants:

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) 
} 

Dans le deuxième exemple, nous avons mis les propriétés directement sur Widget (en supposant que widget a un property1, property2 et property3).

J'espère que vous pouvez voir comment cela simplifierait votre code dans les exemples où vous avez affaire à beaucoup de propriétés.

Mise à jour: Si vous choisissez de mettre en œuvre ModelDriven, alors vous référencer les propriétés ci-dessus dans votre forme comme property1, property2, property3, etc. De plus, étant donné que votre action est conduite par un modèle unique, tous les paramètres de formulaire sont considérés comme des enfants du modèle.

Si vous choisissez de ne pas mettre en œuvre ModelDriven alors vous référencer les propriétés ci-dessus dans votre forme comme widget.property1, widget.property2, widget.property3, etc. L'avantage de cette approche est que vous pouvez avoir d'autres propriétés sur l'action qui ne correspondent pas aux propriétés sur le widget.

En dehors de cela, il n'y a pas de différence. En fait, le livre en dit d'ailleurs autant:

Comme la propriété JavaBeans soutenue par un objet, l'action ModelDriven nous permet également d'utiliser un objet Java complexe pour recevoir nos données. Les différences entre ces deux méthodes sont légères et il n'y a pas de conséquences fonctionnelles à choisir l'une par rapport à l'autre.

- Struts 2 en action, Chapitre 3. Travailler avec Struts 2 actions> Transférer des données sur des objets - Pg. 62

+0

J'ai compris les avantages. ce que mon qn est comment les actions pilotées par le modèle sont meilleures que les beans sauvegardés par l'objet (ils sont tous les deux utilisés pour conserver les données dans les objets). – SonOfTheEARTh

+0

Ils ne sont pas meilleurs. Juste une alternative. J'ai mis à jour ma réponse pour refléter cela. –

2

bien modèle mené est mieux en ce qui concerne si vous avez la propriété de nidification par exemple si vous avez le haricot utilisateur et il a le nom den propriété du côté jsp que vous devez faire quelque chose comme user.name de sorte que OGNL peut découvrir que vous pointez l'objet utilisateur et à l'intérieur de cette propriété de nom.

Dans le cas d'une interface pilotée par un modèle, cette interface placera l'objet bean en haut de la pile de valeur lorsqu'une requête est venue pour une action puisque ce bean est en haut de la pile de valeur. dans votre jsp.

J'espère qu'il répondra à votre question

Questions connexes