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 :

[Validator] coloration des champs non renseignés


Sujet :

Struts 1 Java

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2006
    Messages : 60
    Points : 52
    Points
    52
    Par défaut [Validator] coloration des champs non renseignés
    Bonjour,

    j'effectue une vérification de mes champs avec struts-validator.
    Je voudrais que les champs qui ne sont pas remplis soit colorés de façon à pouvoir les mettre en évidences.
    j'ai vu lors de mes recherches sur internet, que l'on pouvait utilisé "errorstyle" dans un "<hmtl:text".
    Le problème est que la version de struts que je possède est la 1.2.4 et cela n'est pas encore pris en compte dans cette version. (je ne peut pas changer de version...)

    quelqu'un peut-il m'aider?

    merci

  2. #2
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    Tu peux tester la présence de messages d'erreur sur les champs via le tag logic:messagesPresent et mettre un style particulier dans ce cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <logic:messagesPresent property="nomDuChamp">
       <td style="background-color:red;">
    </logic:messagesPresent>
    <logic:messagesNotPresent property="nomDuChamp">
       <td>
    </logic:messagesNotPresent>...
    Modératrice Java - Struts, Servlets/JSP, ...

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2006
    Messages : 60
    Points : 52
    Points
    52
    Par défaut
    merci c_nvy pour ta réponse, le problème c'est que cela va apporter beaucoup trop de changement....

    j'ai donc trouvé une solution, c'est pas très propre mais bon... en gros j'ai modifié les scripts présent dans le .jar de struts de façon à ce qu'il change la couleur des composants qui ne sont pas valide.

    maintenant j'ai un nouveau problème....
    plusieurs de mes jsp font référence au même formulaire mais ne possède pas obligatoirement les mêmes champs... la validation pose donc problème car les champs ne sont pas tous trouvés.. ce problème est réglé (encore une modification du .jar).
    dans certains cas, les jsp possèdent les mêmes nom de champs mais le message d'erreur est différents pour chaque champs, hors dans mon validation.xml je n'ai pas de moyen pour changer mon message...

    quelqu'un a t-il une solution pour ce problème?
    (si je n'ai pas été clair merci de me le dire... lol)

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2006
    Messages : 60
    Points : 52
    Points
    52
    Par défaut
    voici une meilleur explication :
    j'ai 2 jsp A et B,
    ma jsp A possède 3 champs : a,b et c
    ma jsp B possède 4 champs : b,c,d,e

    normalement chaque jsp possède son propre formulaire, dans ce cas, je devrais avoir AForm.java et BForm.java. mais dans mon cas je possède un seul formulaire CForm.java qui est utilisé par mes jsp A et B.

    quand je fais une vérification avec struts-validator dans ma jsp A,
    il va vérifier les champs a,b,c mais aussi les champs d et e qui n'existe pas dans ma jsp A
    idem pour la jsp B la vérification va ce faire sur les champs a,b,c,d et e...
    le problème pour les champs qui n'existe pas est réglé (vérification directement dans le .jar de struts..)

    pour ma jsp A le message d'erreur si le champ b est vide est :" champ de votre jsp A est vide"
    pour ma jsp B le message d'erreur si le champ b est vide est :" champ de votre jsp B est vide"
    on voit bien que le message d'erreur est différent pour les deux jsp. le problème c'est que dans mon validation.xml je fais la vérification du champ b sans savoir de quel jsp je viens.. donc je peut pas choisir mon message d'erreur...

    y'a t-il un moyen de contourner cela?

    je sais que c'est un peu tiré par les cheveux mais je n'ai malheureusement pas le choix, je ne peut pas modifier l'application pour que chaque jsp est son propre formulaire... et je ne peut pas non plus changer le nom des différents champs pour que chacun soit unique...

  5. #5
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    Citation Envoyé par ptitom1381 Voir le message
    plusieurs de mes jsp font référence au même formulaire mais ne possède pas obligatoirement les mêmes champs... la validation pose donc problème car les champs ne sont pas tous trouvés.. ce problème est réglé (encore une modification du .jar).
    Dans ce cas, tu pourrais utiliser une ValidatorActionForm à la place d'une ValidatorForm.
    Dans l'attribut name des balises form du fichier validation.xml, il faut référencer le path des Actions au lieu du nom du form-bean.
    Ainsi, tu peux définir une validation spécifique à chaque action.
    Modératrice Java - Struts, Servlets/JSP, ...

  6. #6
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2006
    Messages : 60
    Points : 52
    Points
    52
    Par défaut
    les deux jsp font aussi référence à la même action donc au même path...

    je crois que je suis dans une impasse...

  7. #7
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    Tu aurais peut-être intérêt à utiliser une MappingDispatchAction, soit plusieurs mapping pour une même Action et des méthodes différentes dans l'Action, comme décrit ici.
    Modératrice Java - Struts, Servlets/JSP, ...

  8. #8
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2006
    Messages : 60
    Points : 52
    Points
    52
    Par défaut
    effectivement cela a l'aire d'être une bonne solution! je suis en train de la tester.

    juste une question, dans ma jsp comment puis-je lui dire que le nom pour le validate est maintenant le path de l'action et non le form?

    voici le code que j'avais avant en utilisant le form :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    function valider(){
        if(validateReferentielSuper(document.getElementsByTagName("FORM")[0])){
            return true;
        }
        else{
            return false;
        }    
    }
    <html:form action='referentielSuper.do?method=ajoutSuperDomaine&action=init' onsubmit="return valider();">
    <html:javascript formName="ReferentielForm"/>

  9. #9
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    Dans l'attribut formName du tag html:javascript, précise le path de l'Action à la place du nom du form-bean.
    Modératrice Java - Struts, Servlets/JSP, ...

  10. #10
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2006
    Messages : 60
    Points : 52
    Points
    52
    Par défaut
    j'ai donc bien remplacé le nom du form par le path de l'action, cela fonctionne correctement.
    Le problème est lors d'un submit il me dit que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ReferentielForm_required is not defined
    en gros il me garde le nom du form (ReferentielForm) et non celui du path (initGestionReferentielSuper) de l'action...
    pourtant dans le script que struts à créer dans ma page, la fonction validate s'appelle bien validateInitGestionReferentielSuper(form)

    cette fonction fait appelle a validateRequired et c'est au momment ou il récupère le formName qu ce n'est pas bon...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     function validateRequired(form) {
            var isValid = true;
            var focusField = null;
            var i = 0;
            var fields = new Array();
            var formName = form.getAttributeNode("name");
     
            oRequired = eval('new ' + formName.value + '_required()');
     
            for (x in oRequired) {
    Le formName.value retourne le nom du form de la jsp... et non pas le path de l'action...

  11. #11
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    As-tu bien précisé le path de l'Action dans l'attribut name du tag form dans le fichier validation.xml ?
    Modératrice Java - Struts, Servlets/JSP, ...

  12. #12
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2006
    Messages : 60
    Points : 52
    Points
    52
    Par défaut
    oici le code rajouté dans le validation.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <form name="initGestionReferentielSuper">
          <field  property="libelle" depends="required">
                <msg name="required" key="erreur.libSuperdomaine"/>
            </field>
         </form>
    et dans ma 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
    function valider(){
        if(validateInitGestionReferentielSuper(document.getElementsByTagName("FORM")[0])){
            return true;
        }
        else{
            return false;
        }    
    }
     
    </script>
     
    <p class="Titre"><span>Gestion des super domaines</span></p>
    <html:form action='initGestionReferentielSuper.do?method=ajoutSuperDomaine&action=init' onsubmit="return valider();">
    <html:javascript formName="initGestionReferentielSuper"/>
    voici aussi le code du struts-config.xml:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <action path="/initGestionReferentielSuper"
    	type="gestionreferentiel.InitialisationReferentielAction"
            scope="session" parameter="method" name="ReferentielForm" >
           <forward name="super" path=".gestionsuperdomaine" />
    </action>

  13. #13
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    Et l'ActionForm ReferentielForm hérite-t'elle bien de ValidatorActionForm ?
    Modératrice Java - Struts, Servlets/JSP, ...

  14. #14
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2006
    Messages : 60
    Points : 52
    Points
    52
    Par défaut
    oui

  15. #15
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    Peux-tu faire un test en codant directement onsubmit="return validateInitGestionReferentielSuper(this);" dans le tag html:form pour voir si ça fonctionne mieux ?
    Modératrice Java - Struts, Servlets/JSP, ...

  16. #16
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2006
    Messages : 60
    Points : 52
    Points
    52
    Par défaut
    j'ai bien remplacé comme tu me l'as indiqué mais toujours le même problème...

  17. #17
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    Cela change-t'il quelque chose si tu ajoutes un "/" devant le path de l'Action dans le fichier validation.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <form name="/initGestionReferentielSuper">
    et dans la jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html:javascript formName="/initGestionReferentielSuper"/>
    Modératrice Java - Struts, Servlets/JSP, ...

  18. #18
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2006
    Messages : 60
    Points : 52
    Points
    52
    Par défaut
    non, au contraire, la fonction validate devient validateReferentielForm() à la place de validateInitGestionReferentielSuper() et donc lorsque je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html:form action='initGestionReferentielSuper.do?method=ajoutSuperDomaine&action=init' onsubmit="return validateInitGestionReferentielSuper(this);">
    il ne reconnait plus ma fonction validateInitGestionReferentielSuper(this)

  19. #19
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    Alors, après avoir fait un test, il faut bien mettre le "/" devant le path de l'Action référencée dans l'attribut name de la balise form du fichier validation.xml :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    <form name="/initGestionReferentielSuper">
    et dans la jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html:javascript formName="/initGestionReferentielSuper"/>
    avec l'attribut onsubmit="return validateInitGestionReferentielSuper(this);" dans le tag html:form.

    et enfin, il faut ajouter l'attribut attribute avec pour valeur le path de l'Action sans le "/" dans le mapping de l'Action :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <action path="/initGestionReferentielSuper"
    	type="gestionreferentiel.InitialisationReferentielAction"
            scope="session" parameter="method" name="ReferentielForm"
    	attribute="initGestionReferentielSuper">
           <forward name="super" path=".gestionsuperdomaine" />
    </action>
    Ainsi, il générera bien la fonction Javascript validateInitGestionReferentielSuper(form) dans la page et la validation côté client fonctionnera.

    Et grâce à cette validation spécifique par action, tu peux aussi personnaliser les messages d'erreur par action et ce pour chacun des champs en utilisant la balise msg dans la balise field du fichier validation.xml :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <form name="/initGestionReferentielSuper">
          <field property="libelle" depends="required">
                <msg name="required" key="erreur.libSuperdomaine.jspA"/>
    	    <arg0 key="libSuperdomaine"/>
          </field>
    </form>
    avec par exemple dans le fichier properties :
    libSuperdomaine=libelle du domaine
    erreur.libSuperdomaine.jspA=Le ${0} est obligatoire dans la jsp A
    Modératrice Java - Struts, Servlets/JSP, ...

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/07/2014, 18h04
  2. [vb.net][LDAP]Problème sur champs non renseignés NULL
    Par JFLESUEUR dans le forum ASP.NET
    Réponses: 2
    Dernier message: 14/12/2006, 16h02
  3. Réponses: 9
    Dernier message: 28/07/2006, 17h38
  4. Moyenne des champs non vide dans un état
    Par loutsky dans le forum Access
    Réponses: 4
    Dernier message: 05/04/2006, 17h26
  5. Réponses: 2
    Dernier message: 07/11/2005, 18h54

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