2010-07-13 6 views
1

Il est temps pour encore une autre question stupide, en ajoutant à une longue ligne d'entre eux. Je suis un débutant avec Struts 2, ayant passé des années à utiliser vieux 1.X. Les actions Struts 2 peuvent être à peu près équivalentes à Struts 1 DispatchActions, simplement en ajoutant des méthodes (et en les définissant dans struts.xml).Struts 2 Méthodes d'action

Ainsi, supposons que j'ai cette méthode:

public String create() throws Exception { 
    // insert create logic here 
} 

Ce que je veux est d'avoir créer() faire double. Si create() est appelée sans aucun paramètre, elle renvoie INPUT (et affiche la page du formulaire JSP), sinon elle traite les données du formulaire et renvoie SUCCESS (et affiche une page par défaut).

La seule façon dont j'ai maintenant est de vérifier et voir si des valeurs sont dans la demande, ce qui me semble idiot. Si je pouvais dire "si j'appelle ceci via HTTP GET montrer le formulaire, si j'appelle ceci via HTTP POST, traiter puis rediriger vers la valeur par défaut".

Comme je l'ai dit, je suis probablement assez bête ici, mais toute aide serait appréciée.

Répondre

1

Ce que vous cherchez est d'utiliser la même action pour montrer un formulaire et ensuite (après soumettre) traiter le formulaire.

public class MyAction { 
    @SkipValidation 
    public String execute() throws Exception { 
     return INPUT; // shows the form 
    } 

    public void validate() { 
     // do your validations here... 
    } 

    public String submit() throws Exception { 
     // process the form 
     // redirect somewhere 
    } 
} 

Si votre action est mise en correspondance comme « myaction », votre formulaire doit se soumettre à « myaction! Soumettre » (c'est Méthode appel dynamique, qui invoque votre méthode submit()).

Vous devrez créer un intercepteur personnalisé si vous voulez appliquer que les méthodes execute et submit sont appelées uniquement par les méthodes HTTP GET et POST (respectivement).