|
Erreurs courantes avec Struts
Cette page explique comment résoudre la plupart des erreurs avec le framework Struts lorqu'on développe une application. Nous verrons quelles sont les causes probables et comment résoudre ces problemes.
| Cannot retrieve definition for form bean null |
| Exception |
org.apache.jasper.JasperException: Cannot retrieve definition for form bean null |
| Cause |
Cette exception se produit typiquement lorsque Struts ne peut pas trouver le form bean qu'il attend pour une action particuliere définie dans le fichier "struts-config.xml". Le plus souvent, cela se produit lorsque le nom donné au form grâce à l'attribut "name" du form-bean ne correpond pas à l'attribut "name" de l'action associée.
L'attribut "name" doit être exactement le même (en respectant la casse). Cette erreur se produit aussi lorsqu'il n'y a pas d'attribut name défini pour l'action. Si il n'y a pas d'attribut nom avec l'élément action, aucun form ne sera associé à l'action.
|
| Cannot retrieve mapping for action |
| Exception |
javax.servlet.jsp.JspException: Cannot retrieve mapping for action /MonAction |
| Cause |
Aucune action définie dans struts-config.xml ne correspond à celle spécifiée dans la JSP <html:form action="MonAction.do". |
| No action instance for path /xxx could be created |
| Exception |
No action instance for path /xxx could be created |
| Causes |
Note: en raison des nombreuses causes possibles pouvant amener à cette erreur, nous vous conseillons de régler votre logger/debugger à un haut niveau de verbosité (mode "bavard"). Vous pourrez ainsi voir les éventuels problemes à l'instanciation de la classe action etc..
|
|
Votre classe Action spécifiée dans le fichier "struts-config.xml" pour l'action nommée xxx ne peut pas être trouvée pour diverses raisons:
- Ne trouve pas le fichier compilé .class de votre classe Action (celui ci doit être dans WEB-INF/classes, en respectant bien sur la structure de votre package au niveau des sous-repertoires). Ce problème peut survenir avec Eclipse si la "défault output folder" est différent du répertoire indiqué ci-dessus.
- L'orthographe du package définie dans votre classe Action (avec le mot clé package) est incorrecte et ne correspond pas avec les informations indiquées dans le fichier struts-config.xml (l'attribut classe doit contenir le package et le nom avec la meme orthographe, la casse est importante!).
|
|
La classe action spécifiée pour l'action /xxx dans le fichier de mapping struts-config.xml n'hérite pas de la classe Action.class. Toutes vos Action définies doivent hériter (directement ou indirectement) de la classe Action fournie avec l'API Struts.
|
|
Il peut s'agir d'un probleme dans votre classpath, tel qu'un serveur web incabable de trouver le fichier ApplicationResources.properties se trouvant dans le repertoire WEB-INF/classes/.
|
| Probleme dans le fichier struts-config.xml avec l'action mapping. |
| Probleme avec le fichier data-source.xml. |
| No getter method for property XXX of bean org.apache.struts.taglib.html.BEAN |
| Exception |
javax.servlet.jsp.JspException: No getter method for property username of bean org.apache.struts.taglib.html.BEAN |
| Causes |
Vous n'avez pas défini de getter getXXX() pour le champ XXX. |
|
Cela peut se produire lorsqu'il y a une faute au niveau de la déclaration du getter. l'orthographe du getter pour le champ "nom" est "getNom()". Il peut tout simplement s'agir d'un oublie apres l'ajout du champ. avec Eclipse, l'idéal est de générer les getter et setter automatiquement: bouton droit => source => generate getters and setters.
|
| java.lang.NoClassDefFoundError: org/apache/struts/action/ActionForm |
| Error |
java.lang.NoClassDefFoundError: org/apache/struts/action/ActionForm |
| Causes |
Cette erreur survient généralement quand le fichier .classe ne peut pas etre trouvé à partir du classpath. Si cette erreur apparait au moment de l'execution de l'application web (les erreurs apparaissent dans le navigateur), cela signifie que la classe n'est pas dans le classpath du serveur d'application (Il faut que les classes soient dans /WEB-INF/classes ou dans /WEB-INF/lib par défaut). dans le cas présent, le fichier qui n'est pas trouvé est ActionForm.class.
|
|
Cette erreur peut parfois arriver lorsque plusieurs fichiers .class (ActionForm.class dans le cas présent) sont présent dans le classpath. Dans ce cas, il faut vérifier qu'une seule classe ActionForm est définie dans l'application et que le déploiement n'a pas dupliqué le fichier .class dans plusieurs répertoires pointés par le classpath. Il peut y avoir plusieurs fois cette même classe dans un fichier .ear ou un fichier .war.
|
| Cannot find ActionMappings or ActionFormBeans collection |
| Exception |
javax.servlet.jsp.JspException: Cannot find ActionMappings or ActionFormBeans collection |
| Causes |
Soit le tag <servlet> de l'action Struts, soit le tag <servlet-mapping> pour l'extension .do ne sont pas présents dans le fichier web.xml.
|
|
Une faute de syntaxe dans le fichier struts-config.xml peut provoquer ce message d'erreur. Par exemple, si il manque un slash pour une balise fermante.
|
|
Vérifier aussi que le fichier web.xml contient l'élément load-on-startup element. cette balise peut soit etre vide, soit contenir un entier qui indique la priorité pour l'execution de la servlet associée. plus le nombre est grand, plus la priorité est basse.
|
|
Cette erreur peut arriver lorsque l'on pré-compile les pages JSP en utilisant Struts.
|
| Exception creating bean of class org.apache.struts.action.ActionForm: |
| Exception |
javax.servlet.jsp.JspException: Exception creating bean of class org.apache.struts.action.ActionForm: |
| Causes |
La cause peut être due à une instanciation directe de la classe ActionForm au lieu d'instancier une classe qui hérite de ActionForm. Cela peut aussi arriver si vous spécifier qu'un form-bean correspond à la classe ActionForm au lieu de spécifié une classe dérivée de ActionForm pour le form-bean.
|
|
Cette erreur peut aussi être provoquée lorsqu'une classe héritant de ActionForm n'est pas associée à une action.
|
| Missing message for key xx.xx.xx |
| Exception |
javax.servlet.jsp.JspException: Missing message for key xx.xx.xx |
| Causes |
La clée spécifiée n'a pas de correspondance dans le fichier ApplicationResources.properties.
|
|
Le fichier ApplicationRessources.properties n'est pas dans le classpath (par défaut, WEB-INF/classes). Java n'arrive donc pas a trouver le fichier pour trouver la correspondance.
|
| NullPointerException at ... RequestUtils.forwardURL |
| Exception |
java.lang.NullPointerException at org.apache.struts.util.RequestUtils.forwardURL(RequestUtils.java:1223) |
| Causes |
Cette erreur arrive lorsqu'on oublie l'attribut path pour l'element forward dans le fichier struts-config.xml
|
| Cannot find bean org.apache.struts.taglib.html.BEAN in any scope |
| Exception |
javax.servlet.jsp.JspException: Cannot find bean org.apache.struts.taglib.html.BEAN in any scope |
| Causes |
Cette erreur se produit lorsqu'on essaye d'utiliser des sous-élément de "form" en dehors du tag "form" de struts. cela peut aussi se produire lorsqu'on utilise des tag html de Struts apres la balise fermente "</html:form>.
Cette erreur apparait aussi lorsqu'on ferme le tag "<html:form>" accidentellement à la fin avec un slash ("</html:form>"). Struts considère donc que les balises qui suivent sont en dehors du form!
|
|