Résoudre les erreurs courantes avec Struts

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!


Pr�c�dents
Erreur JDBC : Mandriva 2006 & configuration MySQL pour utilisation avec un driver JDBC3/1/06
Comment lire et écrire un fichier Microsoft Excel en Java ?2/1/06
JavaQu'est ce que J2ME(Java 2 Platform Micro Edition)?1/20/06
JavaQu'est ce que J2EE(Java 2 Platform Enterprise Edition)?1/20/06
JavaQu'est ce que J2SE(Java 2 Platform Standart Edition)?1/20/06

 
Suivants




Retrouvez ci-dessous les autres sections du Laboratoire Sun
Actualités
SunProjet Kenai: une nouvelle forge open source10/3/08
SunSun Microsystems en forme !8/4/08
SunOpenDS un ldap 100% java7/24/08
SunSun et Fujitsu annoncent un nouveau Sparc647/16/08
SunVisualVM, un outil de surveillance des applications Java7/10/08

Articles
Eclipse Europa : le successeur de Callisto
Après Eclipse Callisto (Eclipse 3.2), la fondation Eclipse sort la nouvelle mouture d'Eclipse appelée Europa (Eclipse 3.3) faisant ainsi passer le nombre de projets embarqués de 10 à 21. Que ceux qui sont réticents aux « distributions » d'Eclipse se rassu12/21/07
JavaCruiseControl : l’outil d’intégration continue à avoir dans sa boite à outils
CruiseControl est un projet open-source offrant de multiples fonctionnalités pour l’intégration, que ce soit pour des développements Java ou .Net. Il est courant sur un projet d’être plusieurs développeurs avec des tâches de développement réparties. Dans7/2/07
JavaEJB3 - Des concepts à l'écriture du code - Editions DUNOD
Consulter le résumé du premier ouvrage du laboratoire Sun de SUPINFO : EJB3 - Des concepts à l'écriture du code. Guide du développeur, éditions DUNOD.5/27/07
JavaPassage de certification Java Web (SCWCD)
Passer une certification est toujours un moment important car cela permet de mieux faire reconnaître ses compétences face à un recruteur ou un employeur.5/12/07
JavaGoogle Web Toolkit
Google Web Toolkit est un framework java pour générer du javascript et des requêtes Ajax à partir d’un code java. Voilà comment il fonctionne.5/10/07
JavaJ2ME Vs SDE
Demain, les terminaux « légers » seront plus nombreux que les ordinateurs personnels, ce qui entraîne une bataille sur le choix d’une plateforme identique à tous ces terminaux… Aujourd’hui nous retrouvons le J2ME ainsi que le SDE qui s’offrent une rude b4/22/07

Tips du laboratoire
EclipseVisual Editor avec Eclipse Europa, c'est possible3/28/08
EclipseGérer les projets dans un workspace.10/16/07
JavaManager votre server d'application avec Eclipse4/21/07
JavaVue des sub-packages avec Eclipse4/21/07
JavaGlisser-déposer avec Eclipse4/21/07

Laboratoire SUPINFO des technologies Sun
labo-sun@supinfo.com


Conditions d'utilisation et © Copyright SUPINFO International University
23, rue de Château Landon - 75010 PARIS - Tél : +33 (0) 153359700 Fax : +33 (0) 153359701
Respect de la vie privée