Travailler avec Struts 2 actions

Utilisation des actions Struts 2

Dans Struts 2, vous passerez la plupart de votre temps à travailler avec des actions. La classe d'actions contient la logique métier, récupère le regroupement de ressources, conserve les données, la validation et sélectionne la page de résultats d'affichage qui doit être renvoyée à l'utilisateur. C'est le cœur de Struts 2, vous devez donc comprendre le concept de base des actions.

1. action

Les actions Struts 2 ne vous obligent pas à implémenter une interface ou une classe étend, il vous suffit d'implémenter une méthodeexecute() qui renvoie une chaîne pour indiquer la page de résultats à renvoyer.

package com.example.user.action;

public class LoginAction{

    //business logic
    public String execute() {
        return "success";
    }

}

Dans lesstruts.xml, configurez la classe d'action avecaction tag etclass attribute. Définissez quelle page de résultats doit retourner à l'utilisateur avecresult tag et le nom de l'action que vous pouvez utiliser pour accéder à cette classe d'action avecname attribute.



  
    pages/welcome.jsp
  

Vous pouvez maintenant accéder à l'action via un suffixe d'extension .action.

http://localhost:8080/Struts2Example/User/validateUser.action

L'action par défaut est configurable, il suffit de changer le paramètre «http://www.example.com/struts2/how-to-remove-the-action-suffix-extension-in-struts-2/[struts.action.extension] ”Une valeur adaptée à vos besoins.

2. Interface d'action en option

Struts 2 est livré avec une interface d'action optionnelle (com.opensymphony.xwork2.Action). En implémente cette interface, elle apporte des avantages pratiques, voir le code source:

package com.opensymphony.xwork2;

public interface Action {

    public static final String SUCCESS = "success";

    public static final String NONE = "none";

    public static final String ERROR = "error";

    public static final String INPUT = "input";

    public static final String LOGIN = "login";

    public String execute() throws Exception;

}

Cette interface est vraiment simple, est livrée avec 5 valeurs constantes couramment utilisées:success, error, none, input and logic. La classe d'action peut désormais utiliser directement la valeur constante.

package com.example.user.action;

import com.opensymphony.xwork2.Action;

public class LoginAction{

    //business logic
    public String execute() {
        return SUCCESS;
    }

}

Je ne comprends pas pourquoi de nombreux développeurs Struts aiment implémenter cette interface Action, il vaut mieux étendre ActionSupport.

3. ActionSupport

Classe de support, une pratique courante pour fournir des implémentations par défaut des interfaces.

ActionSupport (com.opensymphony.xwork2.ActionSupport), une classe très puissante et pratique qui fournit une implémentation par défaut de quelques-unes des interfaces importantes:

public class ActionSupport implements Action, Validateable,
   ValidationAware, TextProvider, LocaleProvider, Serializable {
 ...
}

La classeActionSupport vous donne la possibilité de faire:

1. Validation - A déclaré une méthode validate () et a mis le code de validation à l'intérieur.
2. Text localization - Utilisez la méthode GetText () pour obtenir le message du bundle de ressources.

package com.example.user.action;

import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport{

    private String username;
    private String password;

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    //business logic
    public String execute() {

        return "SUCCESS";

    }

        //simple validation
    public void validate(){
        if("".equals(getUsername())){
            addFieldError("username", getText("username.required"));
        }
        if("".equals(getPassword())){
            addFieldError("password", getText("password.required"));
        }
    }
}

Dans la plupart des cas, vous devez étendre cette classe pour les fonctionnalités pratiques prêtes, sauf si vous avez des raisons de ne pas le faire. C'est également une très bonne classe d'apprentissage pour comprendre comment réaliser l'implémentation de certaines des interfaces Struts 2 importantes.

4. Annotation des actions

Struts 2 a un très bon support pour les annotations, vous pouvez vous débarrasser du fichier XML et le remplacer par@action dans votre classe d'action.

package com.example.user.action;

import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.ResultPath;

import com.opensymphony.xwork2.ActionSupport;

@Namespace("/User")
@ResultPath(value="/")
public class ValidateUserAction extends ActionSupport{

    @Action(value="Welcome", results={
        @Result(name="success",location="pages/welcome_user.jsp")
    })
    public String execute() {

        return SUCCESS;

    }
}

Si vous voulez en savoir plus sur l'annotation Struts 2, veuillez télécharger ceStruts 2 annotation example pour vous entraîner.

Conclusion

Pas de problème, étend juste la classeActionSupport, cela convient dans la plupart des cas.