SOLUTION FINALE AU DERNIER POST
Pour faire suite a ce sujet formulaire devant faire appel a une action pour pré-remplir ses champs
je reprend les derniers posts afin de mettre en oeuvre ce dernier :
Envoyé par azerr
Bonjour
je me permets de m'initer dans la conversation pour tenter de t'eclairer un peu plus sur le fonctionnement de Struts.
Tout d'abord il ne faut surtout pas faire d'acces au donnees dans ton formulaire ActionForm, ca n'est pas son role. Le formulaire struts te permet de recuperer les informations du formulaire HTML (request.getParameter("myGetter") <=> myActionForm.getMyGetter()).
Les acces aux donnees doivent s'effectuer dans ton Action Struts et pas dans ton formulaire. Et si tu veux etre super propre les Action Struts doivent faire appel a une couche service qui fait appel a une couche DAO (acces donnees), mais bon je ne vais pas t'embrouiller.
Ce qui donne :
public ActionForward execute(....) {
// Acces aux donnees pour remplir listeQualification
...
// On pose dans la request listeQualification pour pouvoir ensuite l'utiliser
// dans la View (JSP)
request.setAttribute("listeQualification",listeQualification);
}
A chaque fois que tu appele ton Action, la methode execute est appele,e et ta liste est charge (ceci regle ton probleme de rechargement de la liste apres un submit).
Par contre je te conseille d'utiliser les DispatchAction de Struts, c'est la meme chose que les Action, mais tu peux mettre un parametre dispatch (ex : load, reload,save,...) qui permet d'indiquer la methode a executer (et pas la methode execute)
Si tu veux j'ai tenter d'expliquer une architecture Struts/Spring/Hibernate sur
http://gestcv.sourceforge.net/fr/architecture.html
Et j'ai explique la facon dont j'utilise les DispatchAction sur
http://gestcv.sourceforge.net/fr/arc...ts.html#Action Struts
Je ne vais pas reepliquer sur ce forum, mais je pense qu'il est important de distinguer les donnees qui doivent etre charge tout le temps et les donnees qui doivent etre charger au premeier appel de ta page.
J'espere que ca pourra t'aider.
AngeloEnvoyé par azerr
Je te donne l'exemple avec DispatchAction (j'ai pas teste)
Configurer le form (http://java.developpez.com/faq/strut...onfig_formbean)
Configurer le DispatchAction
Code : Sélectionner tout - Visualiser dans une fenêtre à part <form-bean name="creeEmployeForm" ... />
Important validate="false" (sinon ca declenche le validate a chque foisd que tu appeles ton action)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 <action name="creeEmployeForm" path="/creeEmploye" scope="request" type="com.myapp.struts.creeEmployeA" validate="false" parameter="dispatch"> <forward name="success" path="/CreeEmploye.jsp"/> </action>
parameter="dispatch" pour dir que tu peux utiliser les DispatchAction (il faut que creeEmployeA etende de DispatchACtion).
public class creeEmployeA extends DispatchAction () {
public ActionForward load(....) {
// Charge les combos
// forward vers ta JSP CreeEmploye.jsp
return mapping.findForward("success");
}
public ActionForward save() {
// VALIDATION DU FORMULAIRE
ActionErrors errors = form.validate(mapping, request);
if (!errors.isEmpty()) {
// ERREUR DE VALIDATION, SAUVEGARDE DES ERREUR ET RECHARGEMENT DE LA PAGE
// SANS RECHARGER LE COLLABORATEUR DE LA BASE
saveErrors(request, errors);
return load(mapping, actionForm, request, response);
}
return load(mapping, actionForm, request, response);
}
}
pour charger ta page appele creeEmploye.do.dispatch=load
pour sauver creeEmploye.do.dispatch=save
regarde sur http://java.developpez.com/faq/strut...dispatchAction
Voila l'ideee general, mais je te conseil de faire un forward display load,..
(regarde gestcv).
AngeloEnvoyé par maxf1
Au que oui acces base de donnée INTERDITE (par moi) dans les formulaires. Les initialisations des forms dans les formulaires sont des trucs tout simple normalement, genre qu'elle est le radio button par defaut ou quelque chose dans le style. S'il y a des valeurs de la BDD => passé par une action qui se chargera de l'initialisation.
Tout à faire pour les couches +1 avec toi, ca permet de faire de jolis tests unitaire, avec Junit, StrutsTestCase, HttpUnit, JMeter, etc......(bon courage,)
Partager