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

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Struts 1 Java Discussion :

Affichage de propriete d'un actionForm


Sujet :

Struts 1 Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 26
    Par défaut Affichage de propriete d'un actionForm
    Bonsoir,

    j'ai besoin de vos lumieres. voila ce qui me

    j'ai une classe Lit (pour l'instant je me base sur un Tuto),
    Lit contient un ID (integer), et une String Taille et une String Details, et les getters/setters généré par ganimede.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    57
    58
    59
    60
     
    public class Lit 
    {
    	private int ID_lit;
    	private String Taille;
    	private String Details;
     
     
    	Lit()
    	{
    	}
     
     
    			Lit(int ind, String size, String Details)
    			{
     
    				this.setID_lit(ind);
    				this.setTaille(size);
    				this.setDetails(Details);
     
     
    			}
     
     
    	public void gen_lit(int ind, String size, String Details)
    	{
    		this.setID_lit(ind);
    		this.setTaille(size);
    		this.setDetails(Details);
     
    	}
    	public void gen_lit( String size, String Details)
    	{
     
    		this.setTaille(size);
    		this.setDetails(Details);
     
    	}
     
    	public int getID_lit() {
    		return ID_lit;
    	}
    	public void setID_lit(int id_lit) {
    		ID_lit = id_lit;
    	}
    	public String getTaille() {
    		return new String(Taille);
    	}
    	public void setTaille(String Taille) {
    		this.Taille = Taille;
    	}
    	public String getDetails() {
    		return new String(Details);
    	}
    	public void setDetails(String details) {
    		Details = details;
    	}
     
     
    }
    dans mon Actionform j'ai une string test, les getters/setter correspondants.
    j'ai un objet Lit, les getters/setters et il est initialisé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
     
    public class LoginForm extends ActionForm 
    {
     
    	private String login;
    	private String password;
     
    	Lit t = new Lit();
    	public String test=new String("ahhaha");
     
    	public LoginForm() 
    	{
    		super();
     
     
    		// TODO Auto-generated constructor stub
    		System.out.println("Session a ete crée");
     
    		t.gen_lit(0,"truc", "toto");
     
    	}
     
     
     
    	public String getTaille()
    	{
    		System.out.println("Execution de bean getTaille");
    		System.out.println("");
    		return t.getTaille();
     
    	}
     
    	public Lit getLit() {
    		return t;
    		}
    		public void setLit(Lit t) {
    		this.t = t;
     
    		}
     
     
     
    	public String getLogin() 
    	{
    		return login;
    	}
    	public void setLogin(String login) {
    		this.login = login;
    	}
     
    	public String getPassword() 
    	{
    		return password;
    	}
    	public void setPassword(String password) {
    		this.password = password;
    	}
     
     
     
    	public String getTest() {
    		return test;
    	}
     
     
     
    	public void setTest(String test) {
    		this.test = test;
    	}
     
     
     
     
    }

    voici mon index.jsp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    57
    58
    59
    60
     
     
    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"%>
    <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
     
    <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
     
    <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="core" %>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
    <%@ taglib uri="http://struts.apache.org/tags-nested" prefix="nested" %>
     
     
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
    <html:html>
     
    <head>	
    	<title>tot
    			<bean:message key="index.title"/>
     
    	 </title>
     
    <style type="text/css">
    <!-- <%@ include file="/WEB-INF/css/index.css" %> -->
     
    </style>
     
     
    	 </head>
    <body>
    <br>
     
    <html:form action="/login">
     
     
    <nested:nest property="t">
     
    Taille Lit: <nested:text property="Taille" /> 
    </nested:nest>
     
     
     
    <bean:message  key="prompt.login"  />
     
    <html:text property="login"></html:text>
     
    <bean:message  key="prompt.password"  />
    <html:password property="password"></html:password>	
    <br>
     
    		<html:submit>
    		<bean:message  key="index.login"  />
     
    		</html:submit>
     
     
    </html:form>
     
    </body>
    </html:html>
    ce que je désespère est de pouvoir dans mon index.jsp afficher :
    1) la string test
    2) la String taille de l'objet lit

    lorsque je l'exécute voici ce que j' obtient : No getter method for property: "t.Taille" of bean: "LoginForm"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
     
    Etat HTTP 500 - 
     
    --------------------------------------------------------------------------------
     
    type Rapport d'exception
     
    message 
     
    description Le serveur a rencontré une erreur interne () qui l'a empêché de satisfaire la requête.
     
    exception 
     
    org.apache.jasper.JasperException: An exception occurred processing JSP page /src/index.jsp at line 36
     
    33: <core:out value="${test}" />
    34: <nested:nest property="t">
    35: 
    36: Taille Lit: <nested:text property="Taille" /> 
    37: </nested:nest>
    38: 
    39: 
     
     
    Stacktrace:
    	org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:504)
    	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:397)
    	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:336)
    	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    	org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
     
     
    cause mère 
     
    javax.servlet.ServletException: javax.servlet.jsp.JspException: No getter method for property: "t.Taille" of bean: "LoginForm"
    	org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:850)
    	org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:779)
    	org.apache.jsp.src.index_jsp._jspService(index_jsp.java:108)
    	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:373)
    	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:336)
    	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    	org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
     
     
    cause mère 
     
    javax.servlet.jsp.JspException: No getter method for property: "t.Taille" of bean: "LoginForm"
    	org.apache.struts.taglib.TagUtils.lookup(TagUtils.java:915)
    	org.apache.struts.taglib.html.BaseFieldTag.prepareValue(BaseFieldTag.java:123)
    	org.apache.struts.taglib.html.BaseFieldTag.renderInputElement(BaseFieldTag.java:102)
    	org.apache.struts.taglib.html.BaseFieldTag.doStartTag(BaseFieldTag.java:80)
    	org.apache.struts.taglib.nested.html.NestedTextTag.doStartTag(NestedTextTag.java:63)
    	org.apache.jsp.src.index_jsp._jspx_meth_nested_005ftext_005f0(index_jsp.java:456)
    	org.apache.jsp.src.index_jsp._jspx_meth_nested_005fnest_005f0(index_jsp.java:425)
    	org.apache.jsp.src.index_jsp._jspx_meth_html_005fform_005f0(index_jsp.java:339)
    	org.apache.jsp.src.index_jsp._jspx_meth_html_005fhtml_005f0(index_jsp.java:283)
    	org.apache.jsp.src.index_jsp._jspService(index_jsp.java:101)
    	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:373)
    	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:336)
    	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    	org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
     
     
    note La trace complète de la cause mère de cette erreur est disponible dans les fichiers journaux de JBossWeb/2.0.1.GA.
     
     
    --------------------------------------------------------------------------------
     
    JBossWeb/2.0.1.GA

    Or d'après ce que j'ai compris,
    - le tag nested va tenter d'appeler t.getTaille() afin d'obtenir la propriété Taille ? mais si celui existe dans t, pourquoi il le cherche dans le loginForm ?

    j'ai d'ailleurs tenté de créer une méthode getTaille qui retourne Taille dans le loginForm et cela ne change rien.

    - En outre, si je ne m'abuse, test (la String dans le loginForm) je peux l'afficher par un <core:out> car c'est une simple string de mon loginform ?

    - pourquoi si je retire le tag nested, il ne m'affiche rien ?

    - tandis que Lit t, lui je dois employer <nested>, vous confirmez ?

    j'ai déclaré mon action avec pour scope la session donc logiquement je n'ai pas de soucis de scope ?

    dernier question de novice :
    les taglib quand on les déclare, il vaut mieux employer standard.jar ou alors copier les tld dans web-inf ? les documentations que je trouve (google et livre) parle de copier dans web-inf mais rarement de standard.jar

    et voici mon strut-config:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    <?xml version="1.0" encoding="UTF-8"?>
     
     
     <!DOCTYPE struts-config PUBLIC
              "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
              "http://struts.apache.org/dtds/struts-config_1_3.dtd">
     
    <struts-config>
     
     	<form-beans>
     	<form-bean name="LoginForm" type="Tuto.LoginForm"></form-bean>
     	</form-beans>
     
     
     
     	<action-mappings>
     
      	<action path="/login"  type="Tuto.LoginAction" name="LoginForm"  scope="session" input="/src/index.jsp">
               <forward name="mainmenu" path="/src/mainmenu.jsp" redirect="true"/>
      	</action>
     
     
     	</action-mappings>
     
     	<message-resources parameter="Tuto.ApplicationRessources"/>
    </struts-config>

  2. #2
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    Comme tu as codé dans ta jsp une propriété t, il va donc chercher la méthode getT dans l'ActionForm. Or, elle n'existe pas.
    Avec Struts, je ne te conseille d'ailleurs pas de donner des noms d'un seul caractère à tes propriétés.

    Donc, remplace t par lit dans l'ActionForm :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	private Lit lit = new Lit();
    	public Lit getLit() {
    		return lit;
    		}
    	public void setLit(Lit lit) {
                 	this.lit = lit;
    	}
    Sinon, selon les conventions de nommage Java, les noms des propriétés doivent être écrites en minuscule sauf la première lettre de chaque nouveau mot à partir du deuxième.
    Quand tu crées un JavaBean comme Lit, tu dois suivre les conventions de nommage Java. Il faut donc renommer Taille en taille, Details en details et ID_lit en idLit.
    taille étant une propriété de Lit et Lit étant une propriété de l'ActionForm, tu n'as pas à coder de getter et setter sur la propriété taille dans l'ActionForm.

    Donc, après avoir les modifs que je t'ai indiqué, dans la jsp, code plutôt ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <nested:nest property="lit">
     
    Taille Lit: <nested:text property="taille" /> 
    </nested:nest>
    Concernant les tld, si tu es en J2EE 1.4 ou plus, tu n'as plus besoin de les référencer dans le web.xml ni de les copier sous WEB-INF.
    Il faut juste les référencer dans les jsp via leur uri comme tu l'as fait pour la tld nested et il ira automatiquement les chercher dans le jar de Struts.

    Donc, avec une version 1.3 de Struts :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
    <%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
    <%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
    <%@ taglib uri="http://struts.apache.org/tags-nested" prefix="nested" %>
    <%@ taglib uri="http://struts.apache.org/tags-nested" prefix="nested" %>
    Quant à la JSTL, les uri que tu as codé dans la jsp sont celles de la version 1.1. Pour pouvoir utiliser cette version, il faut être en J2EE 1.4.
    Et pour s'assurer que tu as la bonne version de la JSTL, il faut regarder dans le fichier MANIFEST.MF dans le répertoire META-INF de standard.jar la version qui est spécifiée dans Specification-Version.

    Sinon, j'ai une petite remarque. Pourquoi avoir créer une méthode gen_lit alors que tu peux très bien utiliser directement le constructeur ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 26
    Par défaut
    bonsoir,

    tout d'abord c_nvy un grand merci, si je pourrais je t'enverrai une boite de chocolat !
    je vais me permettre d'abuser car struts me donne une grossesse nerveuse


    1) j'ai une classe réservation qui contient un Set de lit(cf le premier post pour le code)
    d'après ce que j'ai compris, un tag logic:iterate ou nested:nest ne peut pas traiter un Set ?. car si je tape :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <nested:nest property="reservation">
       <nested:iterate property="lit">
    	<nested:text property="taille" />
       </nested:iterate>
    </nested:nest>
    va être remplacer par reservation.lit[0].taille ?(d'ailleurs je serai curieux de savoir le mecanisme, c'est directement reservation.lit[0].taille ?
    ou alors c'est
    temp= reservation.getLit();
    out<<temp[0].taille
    ??)

    mais existe t'il une solution ou il n'y a aucun espoir ?

    j'ai d'ailleurs fait un test :
    j'ai remplacé mon set de lit par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private Lit lit[] = new Lit[1];
    et initialiser dans le constructeur de mon actionform comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      lit[0]=ser_un; // ser_un est un lit
    et voici l'erreur que j'obtiens :
    javax.servlet.jsp.JspException: Invalid argument looking up property: "reservation.lit[1].taille" of bean: "LoginForm"
    j'ai raté un épisode pourquoi il va chercher la position 1 ?
    d'apres ce que j'ai vu nested gère lui même les index, non ?

    2) je recherche un/des articles qui formalisent Struts, jboss et tomcat, c'est à dire qui sort du tutoriel afin de décrire précisément ce qui se cache sous le capot. ceci dans le but de répondre à des questions existentiels comme par exemple, si je tape un tag <toto> dans ma jsp qui va analyser la syntaxe ? tomcat ?


  4. #4
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    Cela ne fonctionne pas parce qu'il n'existe pas de getter indexé sur un Set.
    Il faut donc plutôt passer par un objet de type List.

    Tu peux facilement transformer ton Set en List comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List listLit = new ArrayList(lit);

Discussions similaires

  1. Erreur 438 affichage propriete d'une feuille.
    Par Denis_67 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/05/2013, 12h06
  2. Affichage dynamique d'un tableau avec proprieté javascript
    Par delmarle dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 11/06/2009, 13h39
  3. Propriete d'affichage d'une colonne dans Access
    Par ager1912 dans le forum Accès aux données
    Réponses: 1
    Dernier message: 23/10/2006, 19h36
  4. Affichage de windows avec propriété StayonTop
    Par Graffito dans le forum Linux
    Réponses: 2
    Dernier message: 27/01/2006, 09h17
  5. Réponses: 4
    Dernier message: 22/04/2005, 15h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo