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 :

[Struts] Validator côté serveur


Sujet :

Struts 1 Java

  1. #1
    Membre averti
    Inscrit en
    Avril 2002
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 41
    Par défaut [Struts] Validator côté serveur
    Bonjour à tous,

    Comme le titre l'indique j'ai un soucis pour implémenter le validator côté serveur de Struts 1.2.

    J'ai lu la FAQ, la doc Struts mais soit j'ai mal lu soit j'ai oublié quelque chose mais en re re relisant la doc plusieurs fois, je ne vois pas ce qui ne fonctionne pas.

    Cà compile et j'arrive dans main.jsp alors que je test sans remplir le formulaire dans index.jsp. Il est censé m'indiquer les champs requis mais c'est comme-ci il n'y avait pas de validation défini, pourtant il charge bien validation.xml et validator-rules.xml.

    Struts-config.xml
    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
    <struts-config>   
      <form-beans>
        <form-bean name="brainBean" type="BrainBean" >
          <form-property name="userName" type="java.lang.String"/>
          <form-property name="password" type="java.lang.String"/>
          <form-property name="freetext" type="java.lang.String"/>
        </form-bean>
      </form-beans>  
      <global-forwards type="org.apache.struts.action.ActionForward">
        <forward path="/main.jsp" name="main" redirect="false"/>
        <forward path="/index.jsp" name="index" redirect="true"/>
      </global-forwards>  
      <action-mappings>
        <action path="/logon" name="brainBean" type="LogonAction" input="/index.jsp" scope="session" validate="true"/>
      </action-mappings> 
      <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
        <set-property property="pathnames" value="/WEB-INF/tlds/validator-rules.xml,/WEB-INF/validation.xml"/>
      </plug-in> 
    </struts-config>
    J'ai essayé avec et sans les form-property mais çà ne change rien

    validation.xml
    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
     
    <?xml version="1.0" encoding="ISO-8859-1" ?>
    <!DOCTYPE form-validation PUBLIC
              "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.0//EN"
              "http://jakarta.apache.org/commons/dtds/validator_1_0.dtd">
    <form-validation>
        <formset>
            <form name="breanBean">
                <field property="userName" depends="required">
                    <arg0 key="error.username"/>
                </field>
                <field property="password" depends="required">
                    <arg0 key="error.password"/>
                </field>
            </form>
        </formset>
    </form-validation>
    index.jsp qui lance le formulaire
    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
     
    <%@ page language="java" %>
    <%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %>
    <%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %>
    <html:html>
    <head>
    <title>
        <bean:message key="title"/>
    </title>
    </head>
     
    <BODY>
    <html:errors/>
    <table>
    <html:form action="/logon.do" focus="userName">
      <tr>
        <td><bean:message key="login.username"/></td>
        <td><html:text property="userName" size="50"/></td>
      </tr>
      <tr>
        <td><bean:message key="login.password"/></td>
        <td><html:password property="password" size="50"/></td>
      </tr>
      <tr>
        <td><bean:message key="login.freetext"/></td>
        <td><html:textarea property="freeText" rows="3" cols="50"/></td>
      </tr>
      <tr>
        <td>
    			<html:submit>
    				<bean:message key="login.button.submit"/>
    			</html:submit>
        </td>
        <td>
    			<html:reset>
    				<bean:message key="login.button.reset"/>
          </html:reset>
        </td>
      </tr>
    </html:form>
    </table>
     
    </body>
    </html:html>
    BrainBean qui étend ValidatorForm
    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
     
    import org.apache.struts.validator.*;
     
    public class BrainBean extends ValidatorForm {
     
      	private String userName = null;
      	public String getUserName() { return userName; }
      	public void setUserName(String userName) {	this.userName = userName; }
     
      	private String password = null;
      	public String getPassword() { return password; }
      	public void setPassword(String password) {	this.password = password; }
     
      	private String freeText = null;
      	public String getFreeText() { return freeText; }
      	public void setFreeText(String freeText) {	this.freeText = freeText; }
     
    }
    LogonAction qui étend Action
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    import org.apache.struts.action.*;
    import javax.servlet.http.*;
     
    public class LogonAction extends Action {
     
      public ActionForward execute (ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response ){
     
        return actionMapping.findForward("main");
      }
     
    }
    et ma page forward: main.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
     
    <%@ page language="java" %>
    <%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %>
    <%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %>
     
    <html:html>
    <head>
    <title>
        <bean:message key="title"/>
    </title>
    </head>
    <html:errors/>
    <BODY>
     
    <bean:write property="userName" name="brainBean" /><br>
    <bean:write property="password" name="brainBean" /><br>
     
    Le texte tapé est : <br> <bean:write property="freeText" name="brainBean" />
     
    </BODY>
    </html:html>
    ApplicationRessources.properties
    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
     
    # Global
    exception = An exception occurs while performing the action, please see the log file
    title = Testeur d'implémentation de Struts 1.2
     
    # Login
    login.username = Entrez votre Login
    login.password = Entrez votre Password
    login.freetext = Entrez un texte quelconque
    login.button.submit = Envoyer
    login.button.reset = Vider
     
    # Erreurs
    error.username = Login field
    error.password = Password field
     
    # Error messages for Validator framework validations
    errors.required={0} is required.
    errors.minlength={0} cannot be less than {1} characters.
    errors.maxlength={0} cannot be greater than {2} characters.
    errors.invalid={0} is invalid.
    errors.byte={0} must be a byte.
    errors.short={0} must be a short.
    errors.integer={0} must be an integer.
    errors.long={0} must be a long.0.   errors.float={0} must be a float.
    errors.double={0} must be a double.
    errors.date={0} is not a date.
    errors.range={0} is not in the range {1} through {2}.
    errors.creditcard={0} is not a valid credit card number.
    errors.email={0} is an invalid e-mail address.
    Tant qu'à faire, voici web.xml
    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
    <web-app>
      <display-name>Projet Struts</display-name>
      <servlet>
        <servlet-name>action</servlet-name>
        <servlet-class>
            org.apache.struts.action.ActionServlet
        </servlet-class>
        <init-param>
            <param-name>config</param-name>
            <param-value>
             /WEB-INF/struts-config.xml
            </param-value>
        </init-param>
        <init-param>
          <param-name>application</param-name>
          <param-value>ApplicationResources</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
      </servlet>
      <servlet-mapping>
        <servlet-name>action</servlet-name>
        <url-pattern>*.do</url-pattern>
      </servlet-mapping>
      <taglib>
        <taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri>
        <taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
      </taglib>
      <taglib>
        <taglib-uri>/WEB-INF/struts-html.tld</taglib-uri>
        <taglib-location>/WEB-INF/struts-html.tld</taglib-location>
      </taglib>
      <taglib>
        <taglib-uri>/WEB-INF/struts-logic.tld</taglib-uri>
        <taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
      </taglib>
      <taglib>
        <taglib-uri>/WEB-INF/struts-nested.tld</taglib-uri>
        <taglib-location>/WEB-INF/struts-nested.tld</taglib-location>
      </taglib>
      <taglib>
        <taglib-uri>/WEB-INF/struts-template.tld</taglib-uri>
        <taglib-location>/WEB-INF/struts-template.tld</taglib-location>
      </taglib>
      <taglib>
        <taglib-uri>/WEB-INF/struts-tiles.tld</taglib-uri>
        <taglib-location>/WEB-INF/struts-tiles.tld</taglib-location>
      </taglib>
    </web-app>
    J'ai lu la doc, les exemples... il ne semble rien manquer, et pourtant :

  2. #2
    Membre émérite
    Avatar de RanDomX
    Profil pro
    sans
    Inscrit en
    Mars 2003
    Messages
    579
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mars 2003
    Messages : 579
    Par défaut
    J'ia pas tout lu; je me suis arrété là:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <html:form action="/logon.do" focus="userName">
    Déja à ce niveau il te manque l'invocation du script généré.
    De plus il te manque l'attribut name ds ce tag, qui représente le bean a valider.

    Si il s'appelle monBean, tu ajouter onSubmit="validateMonBean()".


    @+

  3. #3
    Membre averti
    Inscrit en
    Avril 2002
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 41
    Par défaut
    Merci... car tu m'as mis sur la voie...

    Mais l'erreur est là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <form-validation> 
        <formset> 
            <form name="breanBean">
    Le vrai nom du form est brainBean et pas breanBean

    C'est en spécifiant le name du formulaire dans index.jsp que l'exception m'avertissant de l'erreur de nom à enfin surgit...

    Merci, tout refonctionne

    Je n'ai pas changé une seule ligne de code par rapport à ce que j'ai posté en dehors de la correction de l'erreur de syntaxe sur le nom du form dans validation.xml.
    Donc, çà fera un bel exemple bien complet de validation server vu que dans les exemples contenu dans la doc, on a rarement un truc complet et il manque toujours une partie par-ci et une partie par-là 8)

  4. #4
    Membre émérite
    Avatar de RanDomX
    Profil pro
    sans
    Inscrit en
    Mars 2003
    Messages
    579
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mars 2003
    Messages : 579
    Par défaut
    ce que je comrends pas c pour quoi tu utilise la validator pour valider coté serveur ?

    en général c plutot coté client.... meme si on peut le faire coté serveur.

  5. #5
    Membre averti
    Inscrit en
    Avril 2002
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 41
    Par défaut
    Et bien disons que je suis allergique au javascript

    Plus sérieusement c'est que j'ai dans l'idée d'aller plus loin dans la validation.

    En fait j'ai des formulaires caché qui sont envoyé au serveur et je souhaite gérer les erreurs éventuelles qu'ils pourraient contenir.

    Si j'envoi un hidden mal configurer (par exemple à partir de donnée contenu localement par l'utilisateur) alors le validate javascript va me pop indefinimment une erreur que l'utilisateur ne pourra pas réparer lui-même.

    Je sais pas si je suis clair mais pour moi, la validation est un business du serveur.

    Il attend un message de type X pour fournir une réponse de type Y, pour cela il doit vérifier que le message est bien du type X.

    Au niveau performance, le validate permet finalement d'alléger la charge du serveur, mais je ne vois que cette intérêt. Intérêt qui disparait si le nombre de validation est restreint par utilisateur

  6. #6
    Membre émérite
    Avatar de RanDomX
    Profil pro
    sans
    Inscrit en
    Mars 2003
    Messages
    579
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mars 2003
    Messages : 579
    Par défaut
    oui et donc dans ce cas tu as interet a centraliser ta validation ds le bean concerné, dans la methode validate() des actionForms qui est faite pour valider coté serveur, en ajoutant a ton mapping action validate=true

  7. #7
    Membre averti
    Inscrit en
    Avril 2002
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 41
    Par défaut


    Exactement... et puis je crois que tant qu'on peut éviter le javascript, il faut le faire.

    Le javascript, caymal

  8. #8
    Membre averti
    Inscrit en
    Avril 2002
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 41
    Par défaut
    *hop hop*

    Je refais monter ce sujet car il y a pas mal de demande sur ce sujet en ce moment

  9. #9
    Invité de passage
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1
    Par défaut
    Bonjour,
    Je profite de ce topic pour ne pas en multiplier.

    Je suis débutant en java struts et je suis déjà bloqué :
    J’ai suivi un tuto avec un exemple, j’ai donc créé un projet web et eclipse, puis j’ai ajouter les librairies sturts 1.1, j’ai le fichier struts- config.xml, le fichier validator-rules.xml et validation.xml. dans le réertoire WEB-INF. Je travaille sous tomcat 5.0
    Le problème est que lorsque je lance tomcat, les fichiers de validation ne sont pas chargés et donc lorsque j’execute l’exemple de l’application, je m’attend à voir les messages d’erreurs contenu dans « ApplicationResources » l’execution passe directement dans l’actionforward, la validation n’est pas executée.

    Merci pour tout idée qui peut me mettre sur la voie..
    Je ne sais pas s'il y a une autre configuration ailleurs, mais je ne vois vraiment pas pourquoi il ne charge pas la validation.
    J'avais déjà vu que pour certains projet le lancement donne "INFO: Loading validation rules file from '/WEB-INF/validation.xml'" mais pas pour moi

    struts-config.xml
    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
    ?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" 
    							   "http://struts.apache.org/dtds/struts-config_1_2.dtd">
     
    <struts-config>
    	<data-sources />
    	<form-beans >
    		<form-bean name="userLoginForm" type="bureau.struts.form.UserLoginForm" />
    		<form-bean name="startApplicationForm" type="bureau.struts.form.StartApplicationForm" />
    		<form-bean name="erreurPageForm" type="bureau.struts.form.erreurPageForm" />
    	</form-beans>
     
    	<global-exceptions />
     
    	<global-forwards >
        <forward
          name="welcome"
          path="/userLogin.jsp"
          contextRelative="true" />
    	</global-forwards>
     
     
      <action-mappings >
     
        <action
          attribute="userLoginForm"
          input="/userLogin.jsp"
          name="userLoginForm"
          path="/userLogin"
          scope="request"
    	  validate="true"
          type="bureau.struts.action.UserLoginAction">
          <set-property property="cancellable" value="true" />
          <forward name="login_success" path="/startApplication.jsp" />
          <forward name="login_failure" path="/userLogin.jsp" />
        </action>
     
        <action
          attribute="startApplicationForm"
          parameter="todo"
          input="/startApplication.jsp"
          name="startApplicationForm"
          path="/startApplication"
          scope="request"
          type="bureau.struts.action.StartApplicationAction">
          <set-property property="cancellable" value="false" />
     
          <forward name="fiche_compte" path="/ficheCompte.jsp" />
          <forward name="list_compte" path="/listCompte.jsp" />
          <forward name="start" path="/startApplication.jsp" />
     
        </action>
     
     
      </action-mappings>
     
     
      <message-resources parameter="bureau.struts.ApplicationResources" /> 
     
      <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
    		<set-property property="pathnames"
    		              value="/WEB-INF/validator-rules.xml,
    		              		 /WEB-INF/validation.xml"/>
      </plug-in>
     
    </struts-config>
    validation.xml
    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
    <?xml version="1.0" encoding="ISO-8859-1" ?>
     
    <!DOCTYPE form-validation PUBLIC
              "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN"
              "http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd">
     
     
     
    <form-validation>
    	<global>
    		<constant>
    			<constant-name>entierpositif</constant-name>
    			<constant-value>^\s*\d+\s*$</constant-value>
    		</constant>
    	</global>
     
    	<formset>
    		<form name="userLoginForm">
    		    <field property="login" depends="required,minlength">
    			<arg0 key="welcome.login.login"/>
    			<arg1 name="minlength" key="${var:minlength}" resource="false" />
    			<var>
    				<var-name>minlength</var-name>
    				<var-value>8</var-value>
    			</var>
    		</field>
    		<field property="password" depends="required,minlength">
    			<arg0 key="welcome.login.password"/>
    			<arg1 name="minlength" key="${var:minlength}" resource="false" />
    			<var>
    				<var-name>minlength</var-name>
    				<var-value>8</var-value>
    			</var>
    		</field>
    		</form>
    	</formset>
     
    </form-validation>
    page jsp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <html:javascript formName="userLoginForm" dynamicJavascript="true" staticJavascript="true" />
    <html:form action="/login" focus="login" onsubmit="return validateUserLoginForm(this);">
    	<html:text property="login" size="16" /><br />
    	<html:password property="password" size="16" redisplay="false" /><br />
    	<html:submit value="login" />
    </html:form>

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Struts 1.2] : validation coté serveur
    Par richard_34b dans le forum Struts 1
    Réponses: 3
    Dernier message: 15/09/2004, 15h42
  2. [ Struts ][ Validator ]validation côté serveur
    Par tiSioux dans le forum Struts 1
    Réponses: 4
    Dernier message: 29/06/2004, 09h25
  3. [Struts-Validator] Gestion d'erreurs
    Par sylvain_neus dans le forum Struts 1
    Réponses: 14
    Dernier message: 09/04/2004, 15h15
  4. Réponses: 9
    Dernier message: 24/03/2004, 12h15
  5. [Struts]Validation de formulaire
    Par djoukit dans le forum Struts 1
    Réponses: 4
    Dernier message: 12/03/2004, 09h12

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