Formulaire dynamique

Résolu/Fermé
Naloueeee - 17 août 2009 à 15:59
 Naloueeee - 19 août 2009 à 08:33
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

4 réponses

M@dien Messages postés 437 Date d'inscription mercredi 29 juillet 2009 Statut Membre Dernière intervention 23 septembre 2010 74
17 août 2009 à 17:43
Wouaouh du jsp ça fait longtemps! =)

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.
0
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.
0
M@dien Messages postés 437 Date d'inscription mercredi 29 juillet 2009 Statut Membre Dernière intervention 23 septembre 2010 74
18 août 2009 à 10:11
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:
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.
0
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>
0