struts et JSP, principe des formulaires

struts et JSP, principe des formulaires - Java - Programmation

Marsh Posté le 03-08-2005 à 17:03:38    

Bon je deviens fous là...
 
J'apprends Struts ainsi que les taglib struts et j'essaie de me faire un formulaire pour modifier et ajouter des enregistrements à une base. (une table 'departement' dans cet exemple)
 
Pour avoir ce formulaire j'appelle une action. S'il s'agit d'une modification d'un enregistrement existant, je passe l'id dans l'url (action.do?id=truc)...  
 
Au niveau de l'action, il vérifie si le parametre est present dans l'url et cree un Bean correspondant aux données voulues (le département en question), puis l'enregistre comme attribut dans l'objet request (request.setAttribute). S'il s'agit d'une saisie d'un nouvel enregistrement, l'action ne fait rien et forward à la JSP dans les deux cas.
 
Mon probleme est maintenant de faire la différence dans le JSP de ce formulaire entre les deux cas (ajout-modif). A ce que j'ai lu, on n'utilise plus de scriptlets, tout doit se faire avec des taglib vrai ?  
 
Donc voila ce que j'ai, naïvement (test de presence du bean en fait [:spamafote])
 

Code :
  1. <%@ taglib uri="/tags/struts-html" prefix="html" %>
  2. <%@ taglib uri="/tags/struts-logic" prefix="logic" %>
  3. <%@ taglib uri="/tags/struts-bean" prefix="bean" %>
  4. <html>
  5. <head>
  6.  <title>Saisie d'un département</title>
  7. </head>
  8. <body>
  9.  <h1><logic:present name="departementBean">
  10.       Modification
  11.       </logic:present>
  12.       <logic:notPresent name="departementBean">
  13.       Ajout
  14.       </logic:notPresent> d'un département
  15.  </h1>
  16.  <html:errors />
  17.  <html:form action="/insererDepartement">
  18.  <table>
  19.   <tr>
  20.    <td> Nom: </td>
  21.    <td> <html:text property="departementName" size="50"  /> </td>
  22.   </tr>
  23.   <tr>
  24.    <td> Description: </td>
  25.    <td> <html:textarea property="departementDesc" /> </td>
  26.   </tr>
  27.   <tr>
  28.    <td> <html:reset value="Effacer formulaire" /> </td>
  29.    <td> <logic:present name="departementBean">
  30.      <html:hidden property="idDepartement" />
  31.      <html:submit value="Modifier"/>
  32.       </logic:present>
  33.       <logic:notPresent name="departementBean">
  34.        <html:submit value="Ajouter" />
  35.       </logic:notPresent>
  36.    </td>
  37.   </tr>
  38.  </table>
  39.  </html:form>
  40. </body>
  41. </html>


 
et voila ce que ca donne:
 
http://img293.imageshack.us/img293/1368/ecran14lu.jpg
 
Le premier test ok: j'ai bien "ajout" dans le titre, le deuxieme non [:le kneu] (le bouton comporte le label "modifier" )...  
Faut m'expliquer ce que j'ai pas compris :cry:


---------------
Posté depuis des chiottes, sales. Me gusta.
Reply

Marsh Posté le 03-08-2005 à 17:03:38   

Reply

Marsh Posté le 03-08-2005 à 21:05:01    

boulax a écrit :

Struts [...] taglib struts


Fuis :o
 
Et pense à utiliser les taglibs de la JSTL :o
 
Et t'as oublié de poster les classes Action et Form associées :o


Message édité par masklinn le 03-08-2005 à 21:07:01

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 03-08-2005 à 22:49:05    

Ce qui serait intéressant c'est plutôt ton struts-config.xml.  
 
Notamment pour savoir le nom du form-bean associé à l'action insererDepartement ce ne serait pas departementBean par hasard ?
 
Si oui le comportement que tu obtiens est normal et est lié au fonctionnement de la balise <html:form>  
Si le bean n'est pas présent dans le scope défini au niveau de l'action  
la balise <html:form> le créé.
 
Autrement dit au début de ta JSP ton bean n'est pas présent et la première balise <logic:present> ne le trouve pas mais le deuxième se situe au sein de la balise <html:form> qui créé ce bean et donc ton deuxième <logic:present> trouve le bean ...
 

Reply

Marsh Posté le 03-08-2005 à 23:11:12    

spiman a écrit :

Ce qui serait intéressant c'est plutôt ton struts-config.xml.  
 
Notamment pour savoir le nom du form-bean associé à l'action insererDepartement ce ne serait pas departementBean par hasard ?
 
Si oui le comportement que tu obtiens est normal et est lié au fonctionnement de la balise <html:form>  
Si le bean n'est pas présent dans le scope défini au niveau de l'action  
la balise <html:form> le créé.
 
Autrement dit au début de ta JSP ton bean n'est pas présent et la première balise <logic:present> ne le trouve pas mais le deuxième se situe au sein de la balise <html:form> qui créé ce bean et donc ton deuxième <logic:present> trouve le bean ...


 
un expert :love:
 
Ok tu as élucidé la chose, mais donc comment faire pour créer proprement un formulaire qui puisse servir à la fois à la saisie et à l'insertion de données ?


---------------
Posté depuis des chiottes, sales. Me gusta.
Reply

Marsh Posté le 04-08-2005 à 00:02:22    

Il te faut juste tester soit un attribut de l'ActionForm soit un attribut placé directement dans la request ou la session selon ton besoin. Attribut que tu auras prélablement renseigné avec une constante pour savoir si t'es en modification ou non.  
 
Tu testes avec <logic:equal> :
par exemple pour un attribut de ton ActionForm :
 
<logic:equal name="departementBean" property="typeAction" value="<%=Constantes.MODIFICATION%>" >
 
</logic:equal>
 
Je sais pas si c'est propre. On utilise les balises logic de struts
ce qui évite les scriplets mais ce que fait la balise c'est pas violent  
non plus surtout qu'on a pas de else et qu'il faut faire dans ce cas  
<logic:equal> et <logic:notEqual>. On utilise quand même des scriptlets pour éviter de mettre en dur les valeurs testées.    
 
Si tu cherches à faire des formulaires de type CRUD (Create Read Update Delete) tu peux utiliser les DispatchAction de Struts plutôt que les Actions classiques.

Reply

Marsh Posté le 04-08-2005 à 09:15:09    

Merci :jap:
 
Je vais voir de ce côté là :)


---------------
Posté depuis des chiottes, sales. Me gusta.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed