Formulaire dynamique
Résolu
Naloueeee
-
Naloueeee -
Naloueeee -
Bonjour,
Je suis en train de développer une page jsp qui peut avoir deux modes d'affichage: édition et modification.
En mode édition, le formulaire contiendra des champs de type:
Nom: Durand où "Nom" et "Durand" seront affichés sous forme de texte.
En mode modification, je voudrais que Durand se trouve dans une zone de saisie (un <input>).
Je voudrais éviter de faire un formulaire contenant plein de condition du style:
<% if (request.getParameter("type").equals("edition"){
monBean.getNom();
}else{
%>
<input type="text" name="Nom" value="<%=monBean.getNom()%" />
<%
}
%>
car le formulaire est long (beaucoup d'informations modifiables), et ça rique de rendre le code compliqué.
J'avais pensé faire une fonction Javascript qui me creerait dynamiquement le bon champ:
function creerTag(nom, valeur, type, dimension){
if (document.form.type.value=edition){
out.println(valeur);
}else{
var input=document.createElement("Nom");
input.setAttribute("type", type);
input.setAttribute("name", nom);
input.setAttribute("size", dimension);
input.setAttribute("value", valeur);
}
}
mais je ne sais pas comment invoquer ensuite cette fonction dans la jsp.
J'ai essayé de faire <script language="Javascript">creerTag(""champNom", "Durand", "text", 20);</script>
mais ça ne fait rien.
Pourriez vous me dire pourquoi ou bien me conseiller pour réaliser ce formulaire ?
Merci d'avance.
Naloueeee
Je suis en train de développer une page jsp qui peut avoir deux modes d'affichage: édition et modification.
En mode édition, le formulaire contiendra des champs de type:
Nom: Durand où "Nom" et "Durand" seront affichés sous forme de texte.
En mode modification, je voudrais que Durand se trouve dans une zone de saisie (un <input>).
Je voudrais éviter de faire un formulaire contenant plein de condition du style:
<% if (request.getParameter("type").equals("edition"){
monBean.getNom();
}else{
%>
<input type="text" name="Nom" value="<%=monBean.getNom()%" />
<%
}
%>
car le formulaire est long (beaucoup d'informations modifiables), et ça rique de rendre le code compliqué.
J'avais pensé faire une fonction Javascript qui me creerait dynamiquement le bon champ:
function creerTag(nom, valeur, type, dimension){
if (document.form.type.value=edition){
out.println(valeur);
}else{
var input=document.createElement("Nom");
input.setAttribute("type", type);
input.setAttribute("name", nom);
input.setAttribute("size", dimension);
input.setAttribute("value", valeur);
}
}
mais je ne sais pas comment invoquer ensuite cette fonction dans la jsp.
J'ai essayé de faire <script language="Javascript">creerTag(""champNom", "Durand", "text", 20);</script>
mais ça ne fait rien.
Pourriez vous me dire pourquoi ou bien me conseiller pour réaliser ce formulaire ?
Merci d'avance.
Naloueeee
A voir également:
- Formulaire dynamique
- Whatsapp formulaire opposition - Guide
- Tableau croisé dynamique - Guide
- Formulaire de réclamation facebook - Guide
- Exemple tableau croisé dynamique télécharger - Télécharger - Tableur
- Formulaire de reclamation instagram - Guide
4 réponses
Wouaouh du jsp ça fait longtemps! =)
en gros il te faudrait une méthode dans ta classe qui serait du type
et tu l'appelle directement dans ton code comme ça
En espérant ne pas me tromper, ça fait un petit moment que j'ai pas fait de jsp et j'ai pas d'exemple sous les yeux.
en gros il te faudrait une méthode dans ta classe qui serait du type
public void afficherChamp(String nom) { if (request.getParameter("type").equals("edition"){ out.println(nom); }else{ out.println("<input type='text' name='Nom' value='"+ nom +"' />"); } }
et tu l'appelle directement dans ton code comme ça
<% afficherChamp(monBean.getNom()); %>
En espérant ne pas me tromper, ça fait un petit moment que j'ai pas fait de jsp et j'ai pas d'exemple sous les yeux.
Bonjour,
Tout d'abord, merci beaucoup pour ta réponse.
Quand tu dis "il te faudrait une méthode dans ta classe", tu parles de la classe java du bean ?
Si j'essaie de mettre cette méthode dans le code java de la JSP (entre <% et %>), le compilateur me dit "Illegal start expression".
Naloueeee.
Tout d'abord, merci beaucoup pour ta réponse.
Quand tu dis "il te faudrait une méthode dans ta classe", tu parles de la classe java du bean ?
Si j'essaie de mettre cette méthode dans le code java de la JSP (entre <% et %>), le compilateur me dit "Illegal start expression".
Naloueeee.
Je ne connais pas ton architecture mais ça peut-être une idée oui.
Si c'est dans le bean, autant profiter de l'accessibilité des variables, en surchargeant les getteurs:
Dans cette nouvelle méthode, on surcharge la méthode getNom() du bean en getNom(String type), ce qui permet de l'appeler de la manière suivante à partir de la JSP:
En lui passant le paramètre type, la méthode saura comment l'afficher.
En faisant ça, on ajoute autant de méthode que de variables à afficher du bean, mais au moins c'est propre et très lisible pour la JSP.
Si c'est dans le bean, autant profiter de l'accessibilité des variables, en surchargeant les getteurs:
public void getNom(String type) { if (type.equals("edition"){ out.println(nom); }else{ out.println("<input type='text' name='Nom' value='"+ nom +"' />"); } }
Dans cette nouvelle méthode, on surcharge la méthode getNom() du bean en getNom(String type), ce qui permet de l'appeler de la manière suivante à partir de la JSP:
<% monBean.getNom(request.getParameter("type")); %>
En lui passant le paramètre type, la méthode saura comment l'afficher.
En faisant ça, on ajoute autant de méthode que de variables à afficher du bean, mais au moins c'est propre et très lisible pour la JSP.
Merci beaucoup pour ta reponse.
J'ai fait comme tu as dit, ça marche. La seule différence est que j'ai mis le "out.println" dans la jsp.
Ce qui donne donc (pour ceux que ça peut intéresser):
Dans le javabean, j'ai ajouté la méthode:
public String getNom(String type) {
String resultAAfficher = "";
if (type.equals("edition"){
//on veut simplement faire afficher le nom dans la JSP qui appelle
resultAAfficher = nom;
}else{
//on veux faire afficher une zone de saisie dans la JSP qui appelle
resultAAfficher = "<input type=\"text\" name=\"nomChamp\" value=\""+ nom +"\" />";
}
}
Dans la JSP, je fais appel à cette méthode dans une table:
<TABLE>
<TR>
<TD>
Nom:
</TD>
<TD>
<%out.println(monBean.getNom(type));%>
</TD>
</TR>
</TABLE>
J'ai fait comme tu as dit, ça marche. La seule différence est que j'ai mis le "out.println" dans la jsp.
Ce qui donne donc (pour ceux que ça peut intéresser):
Dans le javabean, j'ai ajouté la méthode:
public String getNom(String type) {
String resultAAfficher = "";
if (type.equals("edition"){
//on veut simplement faire afficher le nom dans la JSP qui appelle
resultAAfficher = nom;
}else{
//on veux faire afficher une zone de saisie dans la JSP qui appelle
resultAAfficher = "<input type=\"text\" name=\"nomChamp\" value=\""+ nom +"\" />";
}
}
Dans la JSP, je fais appel à cette méthode dans une table:
<TABLE>
<TR>
<TD>
Nom:
</TD>
<TD>
<%out.println(monBean.getNom(type));%>
</TD>
</TR>
</TABLE>