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 :

Struts2 avec JQuery Plugin: Problème de validation Ajax


Sujet :

Struts 1 Java

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 139
    Points : 50
    Points
    50
    Par défaut Struts2 avec JQuery Plugin: Problème de validation Ajax
    Bonjour à tous,

    Je développe une application Web Struts en utilisant le plugin de JQuery.
    J'aimerais utiliser la validation de formulaire en Ajax grâce à ce plugin.

    Voici mon Action et sa classe mère (j'ai retiré certaines méthodes et attributs):
    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
    @Namespace("/actions")
    @ParentPackage("actions")
    @InterceptorRef(value = "jsonValidationWorkflowStack")
    @Validations(requiredFields = {
            @RequiredFieldValidator(type = ValidatorType.FIELD, fieldName = "prospect.raisonSociale", message = "raison sociale?"),
            @RequiredFieldValidator(type = ValidatorType.FIELD, fieldName = "prospect.enseigneSigle", message = "enseigne?") })
    public class AppelsAction extends AbstractProspectionAction {
     
        private static final long serialVersionUID = 1L;
        private static Log log = LogFactory.getLog(AppelsAction.class);
     
        public AppelsAction() {
            super();
        }
     
        @Action(value = "updateAppel", results = {
                @Result(name = SUCCESS, location = "/jsp/viewAppel.jsp"),
                @Result(name = INPUT, location = "/jsp/viewAppel.jsp"),
                @Result(name = Constants._BLANK, location = "/jsp/_blank.html") })
        public String updateAppel() throws Exception, DAOException {
            if (getModel().getProspect().getId() != null) {
                update();
                return SUCCESS;
            } else
                return ERROR;
        }
    }
    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
    public class AbstractProspectionAction extends ActionSupport implements ModelDriven<FicheProspectModel>, Preparable, SessionAware, ParameterAware{
     
        private static Log log = LogFactory.getLog(ImportProspectAction.class);
     
        protected Map<String, Object> session;
        protected Map<String, String[]> parameters;
     
        public AbstractProspectionAction() {
            super();
            }
     
        protected void update() throws Exception {
            getModel().setProspect(
                    ServiceLocator.getInstance().getServiceMetier()
                            .updateProspect(getModel().getProspect()));
        }
     
        /*
         * Le model retourné est celui stocké en session
         * @see com.opensymphony.xwork2.ModelDriven#getModel()
         */
        @Override
        public FicheProspectModel getModel() {
            if (session.get(Constants.CURRENT_PROSPECT_KEY) == null)
                session.put(Constants.CURRENT_PROSPECT_KEY,
                        new FicheProspectModel());
            return (FicheProspectModel) session.get(Constants.CURRENT_PROSPECT_KEY);
        }
     
        @Override
        public void setParameters(Map<String, String[]> arg0) {
            this.parameters = arg0;
     
        }
        @Override
        public void setSession(Map<String, Object> arg0) {
            this.session = arg0;
        }
    }
    Voici mon formulaire se trouvant dans une <sj:dialog>:
    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
    ...
    <sj:head jqueryui="true"/>
    <script language="JavaScript"
        src="${pageContext.request.contextPath}/struts/utils.js"
        type="text/javascript"></script>
    <script language="JavaScript"
        src="${pageContext.request.contextPath}/struts/xhtml/validation.js"
        type="text/javascript"></script>
    ...
    <s:form id="ficheForm" action="updateAppel" theme="xhtml">
    <table>
    <tr>
    <td colspan="2" style="border-bottom: 1px solid black;">
    <div id="entete" class="element">
    <table>
    <tr>
    <td>
    <s:textfield id="raisonSociale2"    key="ficheprospect.raisonsociale" name="prospect.raisonSociale" maxlength="100" size="40" /> 
     
    <s:textfield key="ficheprospect.enseignesigle" name="prospect.enseigneSigle"
     maxlength="50" size="25" /> 
    </td>
    </tr>
    .........
    </table>
     
    <sj:submit id="buttonSendFiche" onCompleteTopics="complete"
                onBeforeTopics="beforeSendInfoForm" targets="_blank"
                listenTopics="sendFicheForm" validate="true"
                 />
    </s:form>
    A chaque submit, la validation se fait mais j'obtiens toujours l'objet JSON avec les attributs en erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     { "fieldErrors": {"prospect.raisonSociale":["raison sociale?"],"prospect.enseigneSigle":["enseigne?"]}}
    Bien qu'ils soient bien initialisés dans le formulaire! J'ai l'impression que l'intercepteur ne prend pas le bon modèle. Faut-il ajouter quelques paramètres ? Mon modèle étant un Proxy sur une entité JPA.

    Quelqu'un saurait-il m'indiquer d'où peut venir le problème ?

    Merci d'avance pour votre aide.

  2. #2
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 139
    Points : 50
    Points
    50
    Par défaut
    J'ai simplifié le problème en prenant un use case tout bidon:

    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
     
    @Namespace("/actions")
    @ParentPackage("actions")
    @InterceptorRef(value = "jsonValidationWorkflowStack" )
    public class ActionTest extends ActionSupport implements ModelDriven<ModelTest>{
    	private static final long serialVersionUID = 1L;
     
    	private ModelTest model;
     
    	public ActionTest() {
    		model = new ModelTest();
    	}
     
    	@Action(value = "actionTest", results = {
    			@Result(name = SUCCESS, location="/jsp/bravo.jsp"),
    			@Result(name = ERROR, location="/jsp/loupe.jsp"),
     
    	})
    	@Validations(requiredStrings= @RequiredStringValidator(fieldName="champ", message="veuillez entrer le mot de passe!"))
    	public String executeAction1() throws Exception {
    		if("zouzou".equals(getModel().getChamp()))
    		return SUCCESS;
    		return ERROR;
    	}
     
    	@Override
    	//@VisitorFieldValidator
    	public ModelTest getModel() {
    		System.out.println("get model");
    		return model;
    	}
     
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public class ModelTest {
     
    	private String champ;
     
    	public String getChamp() {
    		return champ;
    	}
    	public void setChamp(String champ) {
    		System.out.println("set champ old: "+this.champ+" new:"+champ);
    		this.champ = champ;
    	}
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <s:form action="actionTest" theme="xhtml">
    <s:textfield id="champ" name="champ"/>
    <sj:submit validate="true"/>
    </s:form>
    Un truc tout bête et pourtant, je ne passe pas la validation ajax, le champ, même rempli est en erreur..

  3. #3
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 139
    Points : 50
    Points
    50
    Par défaut
    J'ai résolu le problème, lié à l'ordre des interceptors dans l'interceptors stack.

  4. #4
    Membre à l'essai
    Inscrit en
    Août 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 19
    Points : 19
    Points
    19
    Par défaut
    Pouvez vous écrire votre solution en détails, j'ai pas compris votre réponse

  5. #5
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 139
    Points : 50
    Points
    50
    Par défaut
    Bonjour,

    Il suffisait d'ajouter les annotations suivantes à la classe d'Action:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        @InterceptorRefs({
           @InterceptorRef("jsonValidationWorkflowStack"),
           @InterceptorRef("defaultStack")
    })

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

Discussions similaires

  1. jQuery-plugin / Action Struts associées à AJAX
    Par FooFighters dans le forum Struts 2
    Réponses: 1
    Dernier message: 12/01/2015, 10h09
  2. Validation d'un formulaire en Ajax avec jQuery
    Par Rony Rauzduel dans le forum jQuery
    Réponses: 3
    Dernier message: 28/12/2012, 14h58
  3. Réponses: 1
    Dernier message: 14/09/2011, 16h27
  4. Plugin JQuery Validate+Ajax
    Par HekThor dans le forum jQuery
    Réponses: 2
    Dernier message: 01/11/2009, 19h11
  5. Plugin JQuery Validate+Ajax
    Par HekThor dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 01/11/2009, 18h53

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