OVH Cloud OVH Cloud

[struts] préremplissage de DynaActionForm

6 réponses
Avatar
clxn
Bonjour,

J'ai le code suivant :



public class totoForm extends DynaActionForm
{
private String projectName;

public void setProjectName(String projectName)
{
this.projectName = projectName;
}

public String getProjectName()
{
return projectName;
}

public ActionErrors validate(ActionMapping map, HttpServletRequest
req)
{
}

public void reset (ActionMapping map, HttpServletRequest req)
{
projectName = req.getParameter("projectName");
}
}


(Si j'utilise un dynaactionform c'est que j'en ai besoin et
projectName est bien déclaré dans struts-config)

Mon problème est que lorsque le formulaire s'instancie au sein de ma
page jsp, celle-ci récupère une instance vierge de ce formulaire et
donc il m'est impossible de récupérer la propriété projectName
préremplie.

Or si je mets 'ActionForm' à la place de 'DynaActionForm' j'obtiens ce
que je veux... la propriété est bien préremplie et je peux m'en servir
dans le formulaire de la jsp.

Précision : La page contenant ce formbean est appelée par un get sur
'maPage.jsp'.


Donc ma question est simple : comment faire en sorte que le dynaform
réagisse de la même manière que l'actionform? Est-ce possible? Ou
comment contourner au plus simple ce problème. Ou tout simplement me
dire où j'ai merdé...

6 réponses

Avatar
djice
est-ce que tu initialise ta variable de formulaire en faisaint un
totoForm.setProjectName(***); avant d'appeler ta jsp contenant le
formulaire?


"Adobex" a écrit dans le message de news:

Bonjour,

J'ai le code suivant :



public class totoForm extends DynaActionForm
{
private String projectName;

public void setProjectName(String projectName)
{
this.projectName = projectName;
}

public String getProjectName()
{
return projectName;
}

public ActionErrors validate(ActionMapping map, HttpServletRequest
req)
{
}

public void reset (ActionMapping map, HttpServletRequest req)
{
projectName = req.getParameter("projectName");
}
}


(Si j'utilise un dynaactionform c'est que j'en ai besoin et
projectName est bien déclaré dans struts-config)

Mon problème est que lorsque le formulaire s'instancie au sein de ma
page jsp, celle-ci récupère une instance vierge de ce formulaire et
donc il m'est impossible de récupérer la propriété projectName
préremplie.

Or si je mets 'ActionForm' à la place de 'DynaActionForm' j'obtiens ce
que je veux... la propriété est bien préremplie et je peux m'en servir
dans le formulaire de la jsp.

Précision : La page contenant ce formbean est appelée par un get sur
'maPage.jsp'.


Donc ma question est simple : comment faire en sorte que le dynaform
réagisse de la même manière que l'actionform? Est-ce possible? Ou
comment contourner au plus simple ce problème. Ou tout simplement me
dire où j'ai merdé...


Avatar
clxn
non, j'appelle ma jsp directement, et donc le reset est censé se faire
avant la récupération des propriétés du formulaire pour affichage.
Avec un ActionForm classique ça passe bien...

"djice" wrote in message news:<417687a5$0$291$...
est-ce que tu initialise ta variable de formulaire en faisaint un
totoForm.setProjectName(***); avant d'appeler ta jsp contenant le
formulaire?


public void reset (ActionMapping map, HttpServletRequest req)
{
projectName = req.getParameter("projectName");
}




Avatar
djice
c'est ton reset qui ne marche pas alors...

tente un

public void reset (ActionMapping map, HttpServletRequest req)
{
System.out.println(); req.getParameter("projectName"));
}

pour etre sur de ta valeur...



"Adobex" a écrit dans le message de news:

non, j'appelle ma jsp directement, et donc le reset est censé se faire
avant la récupération des propriétés du formulaire pour affichage.
Avec un ActionForm classique ça passe bien...

"djice" wrote in message
news:<417687a5$0$291$...

est-ce que tu initialise ta variable de formulaire en faisaint un
totoForm.setProjectName(***); avant d'appeler ta jsp contenant le
formulaire?


public void reset (ActionMapping map, HttpServletRequest req)
{
projectName = req.getParameter("projectName");
}






Avatar
Franck
Adobex wrote:

comment contourner au plus simple ce problème.


Essaie en mettant le form en session dans le mappingn ca contourne je crois
@+
--
Franck Lefebure
mailto:

Avatar
Adobex
Bon, je ne comprends pas, c'est comme si l'instance de formulaire qui reçoit
la requête n'était pas la même que celle qui est instanciée dans la jsp...
Le reset reçoit bien les paramètres de requêtes mais rien n'est conservé
lorsque on arrive dans la jsp.

C'est pareil en invoquant la jsp directement ou l'action.

Je ne comprends pas pourquoi ça ne peut pas fonctionner car DynaActionForm
est une classe qui hérite de ActionForm donc à ce niveau ce devrait être le
même fonctionnement.

Le mise en session du formulaire n'y change rien en plus...

En fait, les getter et setter des paramètres ne sont pas invoqués. Je
suppose que ça vient du fait que les propriétés sont déclarées dans le
fichier struts-config et donc ce sont les get() et set() qui sont invoqués
et pas autre chose... doit y avoir conflit en quelque sorte. Je vais voir de
ce côté là...

merci, à+ pour la suite ;)


"djice" a écrit dans le message de
news:4177d369$0$28172$
c'est ton reset qui ne marche pas alors...

tente un

public void reset (ActionMapping map, HttpServletRequest req)
{
System.out.println(); req.getParameter("projectName"));
}

pour etre sur de ta valeur...



"Adobex" a écrit dans le message de news:

non, j'appelle ma jsp directement, et donc le reset est censé se faire
avant la récupération des propriétés du formulaire pour affichage.
Avec un ActionForm classique ça passe bien...

"djice" wrote in message
news:<417687a5$0$291$...

est-ce que tu initialise ta variable de formulaire en faisaint un
totoForm.setProjectName(***); avant d'appeler ta jsp contenant le
formulaire?


public void reset (ActionMapping map, HttpServletRequest req)
{
projectName = req.getParameter("projectName");
}










Avatar
clxn
En fait mon souci était de pouvoir gérer des checkboxes dont le nombre
est variable. Je pensais que l'on ne pouvait pas avoir des propriétés
de formulaire avec un même nom de variable et qui seraient transmis
autant de fois que nécessaire.

Sous forme de GET ça donne ça
http://monsite.com/toto.jsp?prop=1&prop=2&prop=3

Et donc, j'ai découvert que la réception de cette requête était
parfaitement gérable mais qu'il faut utiliser un tableau pour la
propriété du form bean recevant ce paramètre.

Au final, j'utilise un ActionForm classique et je n'ai pas les
problèmes rencontrés avec le DynaActionForm. Ce n'est pas sûr que ce
soit adapté dans tous les cas nécessitant une gestion de propriétés à
nombre variable. D'autre part, n'ayant pas trop le choix au niveau de
la release de Struts, il est probable que mes problèmes venaient du
fait que je n'ai sans doute pas une version suffisamment finalisée...

Adobex