We apologize for untranslated text, you can use the Google Translation button to get an automatic translation of the web page in the language of your choice.

Problème ajax-refresh et modal

Anthony Clergeot · on 7/13/17 at 5:48 PM

Bonjour,

 

Lorsque j'essaie de rafraichir une modal avec ajax-refresh, j'obtient toujours l'erreur suivante : Erreur ajax-refresh

La balise modal :

<jalios:modal title="Formulaire de création de comptes" css="modal-md" url="<%= modalUrl %>" formHandler="<%= formHandler %>" button="Créer" op="opCreer">

Le code HTML générer par cette balise contient bien une div avec ajax-refresh-div et le bouton creer possède aussi l'attribut ajax-refresh.

J'ai aussi include doAjaxFooter.jspf

 

Je suis vraiment à court d'idée sur ce coup là. J'aimerais vraiment faire marcher l'ajax-refresh pour cette modal, sinon les messages d'erreur ne s'afficherons pas dans la modal mais à la prochaine page ouverte (donc après redirect, hors modal).

12 pts
Anthony Clergeot - on 7/17/17 at 10:41 AM
Best answer

Bonjour,

Merci pour votre réponse. J'ai suivi votre conseil et analysé la réponse. Cependant, je n'ai pas d'erreur, juste un code 302 et la réponse est vide.

Ci-joint une capture d'écran.

Je ne vois pas trop pourquoi ça plante. En théorie, ça devrais marcher.

Si vous avez d'autres conseils, je suis preneur. Merci d'avance.

Erreur ajax-refresh

#5

Et pour pousser un peu, j'ai eu un autre problème après. Dans mon cas, ma modal est la suivante : modal

Dans le formhandler associé, je vérifie que les champs obligatoire sont bien rempli et conforme à ce que j’attends. Le problème était que lorsque je validais ma modal sans avoir remplis les champs nécéssaire, il effectuais quand même la redirection et affichais les messages sur la page en dessous, hors de la modal.

Je me suis par la suite rendu compte que lorsque ma validation ne passait pas, la processAction() continuais tout de même et retournais true, ce que déclenchais le code dans ma condition formHandler.validate() de ma jsp.

J'ai donc rajouter un else pour retourner false si la validation ne passait pas : validate Désormais, si les champs ne sont pas rempli, la modal est bien rafraichie grâce à l'ajax refresh et mes messages s'affiche de ce fait en haut de celle ci.

Je sais que c'est tout bête, mais sait-on jamais, ça pourra peut-être être utile à quelqu'un.

En revanche, je perd le contenu des champs rempli quand elle se refresh, et c'est un peu embêtant. Le champ nom est rempli, mais pas le prénom : Avant validation Je valide, ça me dit que le champ prénom est vide, c'est normal. Mais entre temps, j'ai perdu le contenu du champ nom et je dois donc le saisir à nouveau : Apres validation

Anthony Clergeot · on 7/17/17 at 5:15 PM
#6

Je pense que ça pourra aider du monde, car c'est un problème courant :)

Pour la perte du prénom, allez voir un exemple dans EditArticleHandler, et ses méthodes getAvailableXXX (par ex: getAvailablePicture())

Comment ça marche ? Si le handler utilisé est un handler de Type généré (ex EditArticleHandler), alors côté JSP il suffit de produire le champ comme ceci :

<jalios:field name="picture" formHandler="<%= formHandler %>">
  <jalios:control />
</jalios:field>
Cf: /types/Article/doEditArticle.jsp

Sinon, si c'est un handler custom, vous devez / pouvez customiser le comportement du <jalios:field /> comme ceci :

<jalios:field name="picture" formHandler="<%= formHandler %>" value="<%= formHandler.getAvailablePicture() %>">
  <jalios:control settings="<%= new TextFieldSettings() %>" />
</jalios:field>
Là, il y a un peu moins de magie, et on doit explicitement dire comment fonctionne le <jalios:field />
Cf par exemple /admin/editMemberGeneral.jsp.
On y trouve par exemple :
<jalios:field label="ui.adm.mbr-edit.lbl.mail" name='email' value='<%= formHandler.getAvailableEmail() %>' >
  <jalios:control type="<%= ControlType.EMAIL %>" />
</jalios:field>

<jalios:field label="ui.adm.mbr-edit.lbl.phone" name='phone' value='<%= formHandler.getAvailablePhone() %>' >
  <jalios:control type="<%= ControlType.TEXTFIELD %>" />
</jalios:field>    

<jalios:field label="ui.adm.mbr-edit.lbl.mobile" name='mobile' value='<%= formHandler.getAvailableMobile() %>' >
  <jalios:control type="<%= ControlType.TEXTFIELD %>" />
</jalios:field>

Sylvain DEVAUX · on 7/17/17 at 6:48 PM
#7

Mais oui bien sûr ! Le pire c'est que j'ai déjà fais cela il y a quelques mois, mais ça m'était sorti de l'esprit :(

Les <jalios:field> étaient bien paramétrés. Mais j'avais oublié de créer les méthodes getAvailableXXX() dans mon formHandler.

Voici un exemple de mon code, pour les personnes qui pourraient avoir des soucis. Le <jalios:field> dans la jsp :

<jalios:field id="name" name="name" label="Nom" required="true" formHandler="<%= formHandler %>" value="<%= formHandler.getAvailableName() %>">
  <jalios:control settings='<%= new TextFieldSettings().require() %>' />
</jalios:field>

La méthode getAvailableXXX() correspondante dans le Handler :

public String getAvailableName() {
  return this.name;
}

Désormais, tout fonctionne parfaitement. Un grand merci :)

Anthony Clergeot · on 7/18/17 at 10:20 AM
8 pts
Sylvain DEVAUX · on 7/13/17 at 6:38 PM

Quand je rencontre ce type d'erreur, mon reflexe est d'ouvrir le débuggeur du navigateur, et d'inspecter la réponse de la requête ajax.

Si il y a eu une erreur 500 côté serveur, elle sera représentée par ce message pas très explicite.

Donc si erreur 500, la réponse de la requête ajax contiendra le code de l'exception par exemple.

 

Voilà ce qu'on constate par défaut : 

2017-07-13 exception ajax pas explicite

 

Voilà ce que peut nous indiquer le débuggueur : 

2017-07-13 débugguer une exception Ajax

0 pts