IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
logo

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.

SommaireErreurs (5)
précédent sommaire suivant
 

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.

Mis à jour le 14 mai 2004 RanDomX Ricky81

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.

Mis à jour le 14 mai 2004 RanDomX Ricky81

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.

Mis à jour le 14 mai 2004 RanDomX Ricky81

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.

Mis à jour le 14 mai 2004 RanDomX Ricky81

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.

Mis à jour le 4 juin 2008 mattheox

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 ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les 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 © 2022 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.