2016-12-16 3 views
1

Je suis nouveau sur Struts2.Struts 2.3: Modifier la portée des beans d'action

Je ne trouve aucune information dans les documents Struts sur les étendues du bean, et Struts utilise la portée de la requête par défaut, ce qui ne convient pas à mon projet.

J'ai trouvé beaucoup d'informations sur l'utilisation de la portée dans Struts1, mais tous les liens vers docs sont indisponibles.

Pourriez-vous suggérer comment configurer la portée des classes d'action?

+0

Vous pouvez en savoir plus sur les étendues [ici] (http://stackoverflow.com/a/27670618/573032) –

+0

[This] (http://stackoverflow.com/a/20458850/573032) answer is also about portées mais (non mises en valeur). En ce qui concerne votre réponse * Struts utilise l'étendue de la requête par défaut *. –

Répondre

1

Struts c'est un front-end cadre MVC.

Les actions de Struts2 sont des contrôleurs (le C du MVC), et ne devraient pas être utilisées comme des beans; ils doivent plutôt transporter les beans des couches de gestion sous-jacentes vers la vue (le V du MVC, par exemple un JSP).

Vous ne devriez pas avoir une action avec 50 attributs, vous devriez avoir une action avec un couple d'attributs qui sont POJO avec les 50 attributs à l'intérieur. Derrière Struts2, vous pouvez avoir tout ce qui fonctionne sur la couche de gestion, par exemple Java EE (EJB 3, JPA 2, CDI, etc ...), avec tous ses beans et étendues, ou Spring, ou quoi que ce soit d'autre.

Struts2 Les actions sont thread-safe, instanciées par requête, et c'est ainsi que son fonctionnement est étudié. N'essayez pas de changer les champs d'action pour les utiliser comme des haricots, essayez d'apprendre quelles sont les actions et comment elles devraient être utilisées.

Sidenote: si vous avez le libre choix, je suggère Struts2 + Java EE> = 6 + Struts2-CDI-plugin + Struts2-Convention-plugin + Struts2-Json-plugin, exécuter avec Maven et créé à partir d'un Maven archétype.

+0

Merci pour la réponse. J'ai un Struts2 + EJB3 dans le projet, et j'ai besoin de charger à partir de la base de données certaines données pour initialiser et utiliser sur l'écran. Je ne peux pas faire cette opération chaque demande - parce que cette opération est trop chère. Actuellement, j'utilise la session pour stocker des données d'écran - mais c'est une très mauvaise pratique ... Toutes les suggestions, comment stocker les données entre les demandes? Je pense que le contrôleur d'utilisation comme singleton ou avec session de portée - c'est une très bonne idée, comme les servlets ou les contrôleurs mvc printemps .. – Aventes

+0

Si les données sont par utilisateur, la session est bonne. Si les données sont communes, mettez-les en cache, par exemple. dans ejb3 @Singleton. Lire la suite: http://stackoverflow.com/questions/26733141/load-and-cache-application-scoped-data-with-singleton-and-stateless –

+1

Merci pour votre aide! Le problème a été résolu) – Aventes