FAQ StrutsConsultez toutes les FAQ
Nombre d'auteurs : 25, nombre de questions : 96, dernière mise à jour : 23 février 2015 Ajouter une question
Cette FAQ a été réalisée à partir des questions fréquemment posées sur les forums de http://www.developpez.com et de l'expérience personnelle des auteurs.
Nous tenons à souligner que cette FAQ ne garantit en aucun cas que les informations qu'elle propose sont correctes. Les auteurs font leur maximum, mais l'erreur est humaine. Cette FAQ ne prétend pas non plus être complète. Si vous trouvez une erreur, ou que vous souhaitez nous aider en devenant rédacteur, lisez ceci.
- Comment afficher un message d'erreur avec Struts ?
- Comment afficher un message d'erreur simple et totalement dynamique ?
- Comment afficher un message d'erreur simple référencé dans le ResourceBundle ?
- Comment afficher un message d'erreur personnalisé référencé dans le ResourceBundle ?
- Comment savoir dans la JSP s'il y a des messages d'erreurs ?
Pour insérer un message d'erreur sur vos pages, il suffit de positionner le tag <html:errors/>.
Ensuite pour alimenter ce tag, vous devez créer un ActionMessage en lui passant en paramètre soit la clé du message d'erreur contenu dans un bundle, soit le message directement.
Code java : | Sélectionner tout |
ActionMessage am = new ActionMessage("foo.bar.myKey");
Une fois que vous avez construit tous vos ActionMessage, vous devez les ajouter à un ActionErrors. C'est cet objet qui sera retourné.
Code java : | Sélectionner tout |
1 2 3 4 | ActionErrors errors = new ActionErrors(); errors.add(ActionMessages.GLOBAL_MESSAGE, am); .. return errors; |
Il est à noter que pour d'anciennes versions de Struts, il sera fait usage de la classe ActionError en lieu et place de ActionMessage.
Également le paramètre ActionMessages.GLOBAL_MESSAGE peut être remplacé par ActionErrors.GLOBAL_ERROR dans les premières versions.
Pour un message simple et dynamique, on crée l'ActionMessage de la manière suivante.
Dans le ResourceBundle, on a une clé comme ceci :
Code html : | Sélectionner tout |
error.dynamic={0}
Dans l'ActionForm, on remplit l'ActionMessage :
Code java : | Sélectionner tout |
1 2 3 | .. ..new ActionMessage("error.dynamic", "This_is_my_message"); .. |
Le résultat sera le suivant :
Code java : | Sélectionner tout |
This_is_my_message.
Il est à noter que pour d'anciennes versions de Struts, il sera fait usage de la classe ActionError en lieu et place de ActionMessage.
Pour un message simple dont le texte est contenu dans le ResourceBundle, on crée l'ActionMessage de la manière suivante.
Dans le ResourceBundle, on a une clé comme ceci :
Code html : | Sélectionner tout |
error.myerror.foo.bar=This is my message from bundle
Dans l'ActionForm, on remplit l'ActionMessage :
Code java : | Sélectionner tout |
1 2 3 | .. new ActionMessage("error.myerror.foo.bar"); .. |
Le résultat sera le suivant :
Code java : | Sélectionner tout |
This is my message from bundle.
Il est à noter que pour d'anciennes versions de Struts, il sera fait usage de la classe ActionError en lieu et place de ActionMessage.
Pour un message personnalisable dont le texte est contenu dans le ResourceBundle, on crée l'ActionMessage de la manière suivante.
Dans le ResourceBundle, on a une clé comme ceci :
Code html : | Sélectionner tout |
error.myerror.foo.bar.custom=This is my {0} message from bundle
Dans l'ActionForm, on remplit l'ActionMessage :
Code java : | Sélectionner tout |
1 2 3 4 | .. .. am1 = new ActionMessage("error.myerror.foo.bar.custom", "custom"); .. am2 = new ActionMessage("error.myerror.foo.bar.custom", "own"); .. |
Le résultat sera le suivant :
Code java : | Sélectionner tout |
1 2 | This is my custom message from bundle. This is my own message from bundle. |
De la même manière, on peut imaginer toutes sortes de compositions :
Code html : | Sélectionner tout |
error.myerror.foo.bar.custom.comp=This is my {0} message from bundle: {1}
avec la construction suivante :
Code java : | Sélectionner tout |
1 2 3 | .. new ActionMessage("error.myerror.foo.bar.custom.comp", "custom", "hello you"); .. |
pour l'affichage suivant :
Code java : | Sélectionner tout |
This is my custom message from bundle: hello you
Ceci peut être fait dans la limite de trois éléments configurables.
Il est à noter que pour d'anciennes versions de Struts, il sera fait usage de la classe ActionError en lieu et place de ActionMessage.
Il existe au moins trois solutions pour savoir si la balise <html:errors/> est susceptible d'afficher des messages d'erreur.
1) Utilisation de taglib <logic:present> et de la constante Globals.ERROR_KEY
Code JSP : | Sélectionner tout |
1 2 3 | <logic:present name="<%=org.apache.struts.Globals.ERROR_KEY%>"> faire quelque chose de spécifique en cas d erreur </logic:present> |
Attention : ce code semble ne pas fonctionner sous Websphere à cause de l'utilisation de constantes dans la JSP. Il fonctionne très bien sous Tomcat.
2) Utilisation de taglib <logic:present> et de l'objet ERROR
Code JSP : | Sélectionner tout |
1 2 3 | <logic:present name="org.apache.struts.action.ERROR"> faire quelque chose de spécifique en cas d'erreur </logic:present> |
Remarque : Si Struts modifie la définition de la constante, ce code ne fonctionnera plus !
3) Implémenter un TagLib :
Code xml : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <tag> <name>isErrors</name> <tag-class>package.tags.ErrorsTag</tag-class> <description>Indique s'il y a des messages d'erreur</description> <attribute> <name>name</name> <required>false</required> <type>java.lang.String</type> <description> Nom du bean(dans n'importe quel scope) sous lequel les messages d'erreur ont été stockés. S'il n'est pas défini, c'est le nom spécifié par la constante <code>Globals.ERROR_KEY</code> qui est utilisé. </description> </attribute> </tag> |
Code Java : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | import javax.servlet.jsp.JspException; import javax.servlet.jsp.PageContext; import javax.servlet.jsp.tagext.Tag; import org.apache.struts.Globals; public class ErrorsTag implements Tag { private String name = Globals.ERROR_KEY; private Tag parent; private PageContext pageContext; public int doEndTag() throws JspException { return EVAL_PAGE; } protected boolean test() { return pageContext.getRequest().getAttribute(name) == null; } public int doStartTag() throws JspException { int eval; // On teste ici l'existence du bean dans la request if (test()) { eval = SKIP_BODY; } else { eval = EVAL_BODY_INCLUDE; } return eval; } public Tag getParent() { return parent; } public void release() { } public void setPageContext(PageContext arg0) { pageContext = arg0; } public void setParent(Tag arg0) { parent = arg0; } public String getName() { return name; } public void setName(String name) { this.name = name; } } |
Code xml : | Sélectionner tout |
1 2 3 | <X:isErrors> faire quelque chose de spécifique en cas d'erreur </X:isErrors> |
Pour définir l'opération inverse, à savoir détecter lorsqu'il n'y a pas d'erreur, il suffit par exemple de définir une nouvelle TagLib qui hérite de la précédente et redéfinit la méthode test.
Proposer une nouvelle réponse sur la FAQ
Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour çaLes sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2024 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.