2010-11-29 4 views
0

HI: Lors de l'utilisation d'une forme, le paramètre forment le clien peuvent être liés à un objet, par exemple:paramters de liaison dans struts2 sans la forme

processing-forms.html

Dans le client:

<s:form action="register"> 

     <s:textfield name="personBean.firstName" label="First name" /> 
     <s:textfield name="personBean.lastName" label="Last name" /> 
     <s:textfield name="personBean.email" label ="Email"/> 
     <s:textfield name="personBean.age" label="Age" /> 

     <s:submit/> 

</s:form> 

Dans le severside:

public class Register extends ActionSupport { 

    private static final long serialVersionUID = 1L; 

    private Person personBean; 
     //................ 
} 

Ensuite, la pa Le rameter du client est lié à l'instance de personBean.

Maintenant, mon problème est de savoir comment lier les paramètres sans un?

Mon action fonctionne comme un service qui sera appelé dans le javascript, alors comment les lier?

Je sais comment obtenir les paramètres:

Map(String,Object) map=ActionContext.getContext.getParameters(); 
String firstName= map.get("firstname")[0]; 

// ..........

C'est trop laid :(


UPDATE

public class ParaWrapper(){ 
    private String firstName; 
    public void setFirstName(String ..){ 
    this.firstName=... 
    } 
    //the getter of firstName 
    public .... 
} 


public MyAction extends ActionSupport{ 
    private ParaWrapper wrapper; 
    public void setXXX()... 
    public void getXXX()... 
    public void execute(){ 
    System.out.println(wrapper); //here I can not get the parameters,it seems that the parameters are not poputed to this object. 
    } 
} 

Comme je n'utilise pas la balise s: form, alors Comment les lattes savent-elles où placer les paramètres?

Répondre

1

Je pense que vous ne devriez pas utiliser de champs privés pour les valeurs qui devraient être définies via Struts2.

Explication:

Je ne sais pas comment vous postez les paramètres à votre action via JavaScript, mais il devrait fonctionner si vous ajoutez les paramètres nécessaires à l'URL que vous appelez. Vous pouvez éventuellement appeler (comme suggéré dans la liste de diffusion):

http://yourdomain/yourstruts.action?personBean.firstName=a_string&personBean.lastName=my_lastName& ... (plus de paramètres personne)

Struts2 comprendra le point notation et essayer de définir la variable personBean dans votre action cible.S'il s'agit d'une classe Bean (avec un constructeur public vide et des setters publics pour chaque paramètre), elle va générer un nouvel objet et appeler les setters avec les paramètres. S'il ne peut pas accéder aux paramètres, rien ne peut être défini. Donc, si vos setters sont publics et que votre classe PersonBean est correctement définie, un PersonBean devrait être dans votre champ actionsBean personBean.

Espérons que cela aide.

+0

Merci, vous avez raison. Mais je suis un peu gourmand :) De toute façon peut éviter le point dans l'uri? Puisque personBean.firstName = a_string & personBean.lastName = my_lastName est plus long que firstName = a_string & lastName = my_lastName. – hguser

+0

Non, les balises struts2 utilisent cette terminologie spécifiquement pour les beans. MAIS vous ne pouvez bien sûr pas utiliser une requête GET mais une requête POST avec votre JavaScript si vous savez comment faire cela et mettre la personBean.firstName = a_string & personBean.lastName = my_lastName ... dans la demande de publication afin qu'elle ne soit pas visible dans l'URL . – Akku

3

Vous le manipulez de la même manière. Si votre champ est nommé firstname, vous aurez besoin d'une méthode setFirstname sur l'action. Que les paramètres proviennent d'un formulaire ou de JavaScript n'est pas pertinent.

Mise à jour

Sur la base de votre exemple de code révisé, vous aurez besoin d'une méthode getWrapper sur votre action pour exposer l'objet ParaWrapper.

Vous pouvez éviter le "wrapper". préfixe en mettant en œuvre l'interface ModelDriven et en faisant ParaWrapper votre modèle. Alors vous auriez juste des paramètres tels que: firstName, lastName, etc (quels que soient les champs sur ParaWrapper).

+0

Puisqu'il y a trop de paramètres, donc je dois les ajouter tous en tant que champs dans l'action, je me demande s'il y a de toute façon pour envelopper ces paramètres en tant qu'objet comme le personBean? – hguser

+0

Vous pouvez bien sûr. Créez simplement un objet pour contenir tous les paramètres dont vous avez besoin. Vous aurez besoin de getters et setters pour tous les champs de l'objet et vous aurez besoin d'un getter pour l'objet lui-même (sur l'action). –

+0

Merci, s'il vous plaît voir mes mises à jour. – hguser

Questions connexes