Pb selectOneMenu dans dataTable
Bonjour,
Je développe depuis peu une nouvelle application avec JSF 1.2 et richFaces 3.3.0GA.
En suivant la 3ème méthode de la FAQ, j'arrive bien à MAJ chacune de mes lignes en utilisant un setPropertyActionListener.
Par contre, je me trouve devant une impasse lorsque j'utilise un selectOneMenu dans une de mes colonnes. :evilred: :evilred:
En effet, seule la dernière ligne de ma table prends en compte la nouvelle valeur alors que les autres gardent l'ancienne lors de la MAJ. 8O
Existe-t-il une bonne pratique que je n'ai pas mise en œuvre ?
Es-ce un problème connu ? Quels solutions adopter ?
Ma page xhtml:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| <rich:dataTable id="tableMessage" cellpadding="0" cellspacing="0"
width="700" border="0" var="mess" value="#{messageBean.messages}"
rowClasses="fondBlanc,fondCouleur">
<f:facet name="header">
<rich:columnGroup styleClass="fondCouleur">
<rich:column breakBefore="true"><h:outputText value="Message" /></rich:column>
<rich:column width="1%"><h:outputText value="Cible" /></rich:column>
<rich:column width="1%"><rich:spacer width="17" height="10"/></rich:column>
</rich:columnGroup>
</f:facet>
<rich:column colspan="1">
<h:inputText styleClass="sansBord" value="#{mess.corpsMessage}"/>
</rich:column>
<rich:column colspan="1">
<h:selectOneMenu id="selectTypeId" styleClass="sansBord" value="#{mess.typeUtilisateur.idTypeUtilisateur}" >
<f:selectItems value="#{messageBean.tousLesTypesUtilisateurs}"/>
</h:selectOneMenu>
</rich:column>
<rich:column colspan="1">
<h:commandLink action="#{messageBean.processSauvMessage}" >
<h:graphicImage value="../images/valider.jpg" width="17" height="17" title="Valider les modifications" />
<f:setPropertyActionListener value="#{mess}" target="#{messageBean.messToSave}" />
</h:commandLink>
</rich:column>
</rich:dataTable> |
Mon BackingBean:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| public class MessageBBean {
private List<Message> messages;
private List<SelectItem> tousLesTypesUtilisateurs;
private Message messToSave;
public MessageBBean() {
}
public List<Message> getMessages() {
return messages;
}
public void setMessages(List<Message> messages) {
this.messages = messages;
}
public List<SelectItem> getTousLesTypesUtilisateurs() {
return tousLesTypesUtilisateurs;
}
public void setTousLesTypesUtilisateurs(
List<SelectItem> tousLesTypesUtilisateurs) {
this.tousLesTypesUtilisateurs = tousLesTypesUtilisateurs;
}
public Message getMessToSave() {
return messToSave;
}
public void setMessToSave(Message messToSave) {
this.messToSave = messToSave;
}
public String initMessages(){
try {
List<TypeUtilisateur> l = MessageDelegate.getAllTypeUtilisateurs();
this.tousLesTypesUtilisateurs = new ArrayList<SelectItem>();
for(TypeUtilisateur t : l){
this.tousLesTypesUtilisateurs.add(new SelectItem(t.getIdTypeUtilisateur(),t.getLibelleTypeUtilisateur()));
}
this.messages = MessageDelegate.getAllMessages();
} catch (Exception e) {
e.printStackTrace();
return "retourAccueil";
}
return "h1MessageGestion";
}
public void processSauvMessage(){
this.messToSave = MessageDelegate.updateMessage(this.messToSave);
String rien = initMessages();
FacesContext.getCurrentInstance().renderResponse();
} |