Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[STRUTS] Pb avec les index properties pour récupérer les valeur d'une liste de checkbox

1 réponse
Avatar
Curtis Flam
Bonjour, voici mon pb : j'affiche un tableau html et pour chaque ligne il y
a une checkbox; je voudrais que lorsqu'on soumet le formulaire pouvoir
savoir quelles cases ont été cochées.

Dans ma classe formulaire j'ai créer un objet de type java.util.List pour
contenir la valeur de chacune des checkbox; mais au runtime j'ai une erreur
de populate (je n'ai plus la stack trace sous la main).




Avant que je n'ajoute les checkbox dans mon formulaire tout allait très
bien; ensuite j'arrive également à les afficher avec une valeur prédéfinie
(cochée/non cochée); mais ca plante ensuite lorsque je coche/décoche des
cases et que je soumet le formulaire.


Merci pour vos réponses.


Voici des extraites de code :
Classe contenant le formulaire:
***********************************************************
public class RechercheForm extends ActionForm {

private String site;
private Integer nbResultats;
private List<SiteLigne> resultats;


public List<SiteLigne> getResultats() {
return resultats;
}

public void setResultats(List<SiteLigne> resultats) {
this.resultats = resultats;
}

public SiteLigne getResultats(int i) {
return resultats.get(i);
}

public void setResultats(SiteLigne siteLigne, int index) {
if(this.resultats == null){
this.resultats = new ArrayList();
}

while(index >= this.resultats.size()){
this.resultats.add(new SiteLigne());
}
this.resultats.set(index, siteLigne);
}

// + méthodes validate() et reset() et autres get() et set()
********************************************************





JSP contenant le formulaire (liste.jsp):
********************************************************

...
<html:form action="/afficheSuppression">
<html:text property="site"/>

<logic:present name="rechercheForm" property="resultats">
<bean:size id="nbresultats" name="rechercheForm" property="resultats"/>
<logic:equal name="nbresultats" value="0">Aucun résultats</logic:equal>
<logic:greaterThan name="nbresultats" value="0">

<table width="600" border="1" align="center" cellpadding="0"
cellspacing="0" class="Ta">
<logic:iterate id="temp" name="rechercheForm"
property="resultats" indexId="compteur">
<tr>
<td ><html:checkbox property='<%= "resultats[" +
compteur + "].selected" %>'/></td>
<td ><bean:write name="temp"
property="descritpion"/></td>
</tr>
</logic:iterate>
</table>
Supprimer : <html:submit/>
...
********************************************************



Classe Action :
********************************************************
public class AfficheSuppressionAction extends Action {

public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
RechercheForm rechercheForm = (RechercheForm) form;

String site = rechercheForm.getSite();


System.out.println("site : " + site);

System.out.println("Sites selectionnes : ");


List<SiteLigne> selection= rechercheForm.getResultats();
System.out.println("Sites selectionnes : ");
for(SiteLigne temp : selection) {
if(temp.isSelected()) {
System.out.println(temp.getNom());
}
}


return mapping.findForward("afficheSuppression");

}
}
********************************************************


Extrait de Strutsconfig.xml

********************************************************
- <struts-config>
- <form-beans>
<form-bean name="rechercheForm" type="RechercheForm" />
</form-beans>
<global-exceptions />
- <global-forwards/>
- <action-mappings>
-
- <action attribute="afficheSuppressionForm" input="/site/liste.jsp"
name="rechercheForm" path="/afficheSuppression" scope="request"
type="AfficheSuppressionAction" validate="false">
<forward name="afficheSuppression" path="/site/suppression.jsp" />
</action>
</action-mappings>
</struts-config>

********************************************************

1 réponse

Avatar
Lionel
Curtis Flam wrote:
Bonjour, voici mon pb : j'affiche un tableau html et pour chaque
ligne il y a une checkbox; je voudrais que lorsqu'on soumet le
formulaire pouvoir savoir quelles cases ont été cochées.

Dans ma classe formulaire j'ai créer un objet de type java.util.List
pour contenir la valeur de chacune des checkbox; mais au runtime j'ai
une erreur de populate (je n'ai plus la stack trace sous la main).

private List<SiteLigne> resultats;


2 précisions

1) Il te faut une List<String>, sinon le populate ne pourra jamais
fonctionner (ta request ne contient que des String)

2) Dans ta JSP tu utilises des [] pour indexer ta propriété, dans ce cas il
te faut un tableau dans ton form. Pour utiliser une liste, il faut utiliser
des parenthèses.

Lionel