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 :

[Validation] bypass de la validation [Trucs & Astuces]


Sujet :

Struts 1 Java

  1. #1
    Membre éclairé Avatar de pmartin8
    Inscrit en
    Novembre 2003
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 306
    Par défaut [Validation] bypass de la validation
    Bonjour

    J'utilise Struts 1.2.9...
    Dans une page, j'ai 2 bouttons qui appel la meme action mais un boutton doit faire la validation du formulaire avec le validator de Stutrs et le second boutton ne doit pas faire la validation. Je pensais avoir trouvé comment contourner la validation mais il semble que ca ne fonctionne pas ...

    Voici mon JSP pour le boutton qui doit controuner la validation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html:cancel property="submitBt" styleClass="submit">Voir inventaire</html:cancel>
    Ce qui donne le code html suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="submit" name="submitBt" value="Voir inventaire" class="submit">
    Et mon formulaire est défini de cette facon dans struts-config.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <form-bean name="inventoryForm" type="org.apache.struts.validator.DynaValidatorForm">
          <form-property name="ird" type="java.lang.String" />
          <form-property name="forceCode" type="java.lang.String" />

    Et l'Action que j'appel:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        <action path="/addInventory" input=".addInventory" validate="true" scope="request" name="inventoryForm" parameter="submitBt" type="com.expressvu.icount.view.action.AddInventoryAction">
          <set-property property="cancellable" value="true"/>
          <forward name="success" path=".addInventory"/>
          <forward name="view-inventory" path="/viewInventory.do" redirect="true"/>
        </action>
    Normalement avec un <html:cancel> et <set-property property="cancellable" value="true"/> je ne devrais pas valider mon formulaire lorsque l'action est appellé mais cela ne fonctionne pas. Mon formulaire est toujours validé!

    Est-ce qu'un pro de Struts pourrait me donner un coup de main?

  2. #2
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2003
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 59
    Par défaut
    Je ne me suis jamais servi de la balise <html:cancel/>
    Par contre, pourquoi ne surcharges tu pas la méthode "validate" associée à ton formulaire pour filtrer sur le bouton cliqué?

  3. #3
    Membre averti
    Inscrit en
    Août 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Août 2006
    Messages : 22
    Par défaut
    Une autre solution serait de définir une autre action, mappée sur la même méthode, mais avec validate="false" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        <action path="/addInventoryNoValidate" validate="false" scope="request" name="inventoryForm" parameter="submitBt" type="com.expressvu.icount.view.action.AddInventoryAction">
          <forward name="success" path=".addInventory"/>
          <forward name="view-inventory" path="/viewInventory.do" redirect="true"/>
        </action>
    Puis avec une fonction javascript tu change à la volée l'action qui est lancée...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    	function fBa() {
    			document.getElementById('editRegisteredForm').action="/addInventoryNoValidate.do";
    			document.getElementById('editRegisteredForm').submit();
    	}

  4. #4
    Membre éclairé Avatar de pmartin8
    Inscrit en
    Novembre 2003
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 306
    Par défaut
    2 bonnes solutions mais j'aurais vraiment voulu savoir pourquoi mon code plus haut ne fonctionne pas!!

    Est-ce que vous le savez??

  5. #5
    Membre averti
    Inscrit en
    Août 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Août 2006
    Messages : 22
    Par défaut
    Non, perso je ne fais pas comme ça, ça marche très bien comme je fais, c'est assez propre et lisible, et c'est le but.

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2003
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 59
    Par défaut
    Dans la definition de ton action, la propriete "cancellable" ne devrait pas être mise à true de la façon suivante plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <action path="/addInventory" input=".addInventory" validate="true" cancellable="true" scope="request" name="inventoryForm" parameter="submitBt" type="com.expressvu.icount.view.action.AddInventoryAction">
          <forward name="success" path=".addInventory"/>
          <forward name="view-inventory" path="/viewInventory.do" redirect="true"/>
        </action>
    [EDIT]Autant pour moi, c'est à partir de struts 1.3 ...[/EDIT]

  7. #7
    Membre éclairé Avatar de pmartin8
    Inscrit en
    Novembre 2003
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 306
    Par défaut
    Citation Envoyé par klael
    Dans la definition de ton action, la propriete "cancellable" ne devrait pas être mise à true de la façon suivante plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <action path="/addInventory" input=".addInventory" validate="true" cancellable="true" scope="request" name="inventoryForm" parameter="submitBt" type="com.expressvu.icount.view.action.AddInventoryAction">
          <forward name="success" path=".addInventory"/>
          <forward name="view-inventory" path="/viewInventory.do" redirect="true"/>
        </action>

    Non malheureusement, cancellable n'est pas un attribut de action

  8. #8
    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
    Dans la doc Struts 1.2.9, pour l'attribut property du tag html:cancel, il est écrit ceci :
    property Name of the request parameter that will be included with this submission, set to the specified value.
    WARNING - If you set this attribute to a value other than the default, this will NOT be recognized as the cancel key by the Struts controller servlet or the Action.isCancelled() method. You will need to do your own cancel detection. [RT Expr]
    Il ne faut donc pas coder l'attribut property dans le tag html:cancel pour que la valeur par défaut soit prise (soit org.apache.struts.taglib.html.CANCEL).

    Essaie donc en codant tout simplement ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html:cancel styleClass="submit">Voir inventaire</html:cancel>

  9. #9
    Membre éclairé Avatar de pmartin8
    Inscrit en
    Novembre 2003
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 306
    Par défaut
    Ouais j'avais lu ca mais le probleme c'est que je le nom de ma propriété détermine l'action a appeller

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <action path="/addInventory" input=".addInventory" validate="true" scope="request" name="inventoryForm" parameter="submitBt" type="com.expressvu.icount.view.action.AddInventoryAction">
    Si j'enleve property="submitBt" dans mon JSP, mon action n'est plus appellé lorsque je clic sur le boutton.

    Je sens que je pourrai p-e pas utiliser le <set-property property="cancellable" value="true"/> dans mon cas alors...

  10. #10
    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
    Effectivement, je n'avais pas regardé dans le détail le mapping de ton Action et donc je n'avais pas vu l'attribut parameter.

    Dans le cas d'une LookupDispatchAction, je ne vois pas comment tu vas pouvoir mettre en oeuvre la fonctionnalité de non validation via le html:cancel.

  11. #11
    Membre éclairé Avatar de pmartin8
    Inscrit en
    Novembre 2003
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 306
    Par défaut
    Pas de probleme, mais tu as tres bien répondu a mes questions!
    Merci beaucoup!

  12. #12
    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
    Tu pourrais tester avec une DispatchAction mais il doit falloir ajouter dans l'attribut onclick ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html:cancel onclick="setHidden('add');bCancel=true;">
    car si tu regardes le code html généré par le tag html:cancel, l'attribut onclick est renseigné ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <input type="submit" name="org.apache.struts.taglib.html.CANCEL"
     value="Voir inventaire" onclick="bCancel=true;">

  13. #13
    Membre éclairé Avatar de pmartin8
    Inscrit en
    Novembre 2003
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 306
    Par défaut
    Je ne comrpend pas ce que fais setHidden('add')

    Peux tu m'expliquer?

  14. #14
    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
    Clique sur le lien que je t'ai donné pour la DispatchAction, qui te dirige vers la FAQ Struts, pour avoir l'explication.

    J'ai quand même une question avant que tu te lances dans la DispatchAction.
    Tu as créé une LookupDispatchAction simplement pour gérer les deux boutons submit et cancel ?

    Parce que si c'est le cas, tu remplaces la LookupDispatchAction par une Action simple et dans la méthode execute, tu utilises la méthode isCancelled(HttpServletRequest) pour déterminer si c'est le bouton cancel sur lequel on a cliqué.

  15. #15
    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
    Pourquoi [Délestage] ?

  16. #16
    Membre chevronné


    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    7 855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 7 855
    Par défaut
    oui pourquoi mettre le sujet en Délestage ?
    C'est plutôt intéressant comme sujet.

  17. #17
    Membre éclairé Avatar de pmartin8
    Inscrit en
    Novembre 2003
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 306
    Par défaut
    Désolé je croyais qu'il n'y avais pas trop de solution a mon probleme mais je vois que finalement ya peut-etre espoire!

  18. #18
    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
    Citation Envoyé par c_nvy
    Tu as créé une LookupDispatchAction simplement pour gérer les deux boutons submit et cancel ?

    Parce que si c'est le cas, tu remplaces la LookupDispatchAction par une Action simple et dans la méthode execute, tu utilises la méthode isCancelled(HttpServletRequest) pour déterminer si c'est le bouton cancel sur lequel on a cliqué.
    Tu n'as pas répondu à ma question ?

  19. #19
    Membre éclairé Avatar de pmartin8
    Inscrit en
    Novembre 2003
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 306
    Par défaut
    Désolé, le site est tres lent de mon coté ajd et j'ai pas relu les messages de la premiere page

    En fait la solution du setHidden('add') je crois pas que ca va fonctionner car il faudrait que mon action utilise parameter="hidden" alors qu'elle utilise deja parameter="submitBt"

    Il faudrait définitivement que j'appel une autre action...


    Pour ta question sur le lookup dispatchAction, oui c'est une autre solution possible...de ne pas utiliser le lookupDispatchAction.

    Finalement, j'ai ma réponse, le <html:cancel> ne contourne pas la validation lorsqu'on utilise le lookupdispatchAction en meme temps...

    Est-ce que c'est une bonne conclusion au sujet?

  20. #20
    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
    Citation Envoyé par pmartin8
    Finalement, j'ai ma réponse, le <html:cancel> ne contourne pas la validation lorsqu'on utilise le lookupdispatchAction en meme temps...

    Est-ce que c'est une bonne conclusion au sujet?
    Tu peux clore le sujet là-dessus si tu le souhaites, mais sais-tu quelle solution tu vas adopter pour résoudre ton problème ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Comment valider un tableau avec Validator ?
    Par ghost0408 dans le forum Struts 1
    Réponses: 4
    Dernier message: 23/04/2008, 19h23
  2. Réponses: 6
    Dernier message: 07/02/2008, 16h21
  3. [Struts][Validator] : créer ses propre validator
    Par anaon dans le forum Struts 1
    Réponses: 3
    Dernier message: 10/05/2006, 07h19
  4. Réponses: 23
    Dernier message: 11/04/2006, 17h33

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