Problème d'ajout d'une valeur à partir d'un SelectOneMenu
Bonjour,
tout d'abord je travaille avec les framework Spring3, hibernate4 et JSF2 sous eclipse
J'ai deux tables "Matiere" et "Unite" j'ai une clé étrangere dans la table Matiere "idUnit"
dans le formulaire d'ajout d'une matière, j'ai une liste déroulante "SelectOneMenu" qui contient le nom des unités.
j'arrive à afficher les nom des unités à partir de la table "Unité" mais le problème j'arrive pas à recuperer la valeur selectionnée
dans la liste déroulante et de stocker son id dans la table Matiere, après des recherche sur Internet , il faut utiliser un converter
mais j'arrive pas à récuperer cette valeur selectionné.
voiçi le code de ma page MatiereBean:
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 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148
|
package rnu.isamm.pfe.managedBean;
import java.io.Serializable;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;
import org.primefaces.event.RowEditEvent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import rnu.isamm.pfe.model.Classe;
import rnu.isamm.pfe.model.Matiere;
import rnu.isamm.pfe.model.Semestre;
import rnu.isamm.pfe.model.UniteEnseignement;
import rnu.isamm.pfe.service.MatiereService;
import rnu.isamm.pfe.service.SemestreService;
import rnu.isamm.pfe.service.UniteEnseignementService;
@Component("matiereBean")
@ManagedBean(name="matiereBean")
@RequestScoped
@FacesConverter(value = "matiereConverter")
public class MatiereBean implements Converter{
@Autowired
private transient MatiereService matiereservice;
private Matiere matiere;
private List<Matiere> lst_matiere;
@Autowired
private transient UniteEnseignementService uniteservice;
private UniteEnseignement unite;
private List<UniteEnseignement> lst_unite;
///////////////////////////////// data bean /////////////////////////////////////////////:
public Matiere getMatiere() {
return matiere;
}
public void setMatiere(Matiere matiere) {
this.matiere = matiere;
}
public List<Matiere> getLst_matiere() {
return lst_matiere;
}
public void setLst_matiere(List<Matiere> lst_matiere) {
this.lst_matiere = lst_matiere;
}
public UniteEnseignement getUnite() {
return unite;
}
public void setUnite(UniteEnseignement unite) {
this.unite = unite;
}
public List<UniteEnseignement> getLst_unite() {
return lst_unite;
}
public void setLst_unite(List<UniteEnseignement> lst_unite) {
this.lst_unite = lst_unite;
}
public MatiereBean() {
super();
matiere=new Matiere();
// TODO Auto-generated constructor stub
}
@PostConstruct
public void postconstruct(){
lst_matiere= (List<Matiere>) matiereservice.findbyall_Matiere();
}
////////////////////////////////////////: action bean /////////////////////////////////
public void ajouterMatiere(){
try{
matiere.setIdMat(matiere.getIdMat());
matiere.setNomMat(matiere.getNomMat());
matiere.setCoefMat(matiere.getCoefMat());
unite = uniteservice.finById_UniteEnseignement(1);
matiere.setUniteEnseig(unite);
//lst_matiere.add(matiere);
matiereservice.saveMatiere(matiere);
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(null, new FacesMessage("matiere ajouté"));
//System.out.println("classe ajoutée");
}
catch(Exception e){
e.printStackTrace();
}
}
public void suppMat(Matiere m) {
this.matiereservice.deleteMatiere(m);
lst_matiere.remove(m);
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(null, new FacesMessage("classe supprimée"));
}
public void onEdit(RowEditEvent event) {
Matiere mat= (Matiere) event.getObject();
System.out.println("event edit "+mat);
matiereservice.updateMatiere(mat);
FacesMessage msg = new FacesMessage("matiere edité", ((Matiere) event.getObject()).getNomMat());
FacesContext.getCurrentInstance().addMessage(null, msg);
}
public void onCancel(RowEditEvent event) {
FacesMessage msg = new FacesMessage("Matiere Cancelled", ((Matiere) event.getObject()).getNomMat());
FacesContext.getCurrentInstance().addMessage(null, msg);
}
@Override
public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {
// TODO Auto-generated method stub
return null;
}
@Override
public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {
// TODO Auto-generated method stub
return null;
}
} |
en fait l'insertion est faite mais d'une maniere statique car j'ai donnée l'id de l'unité or ce n'est pa le but
j'ai pas compris qu'est ce que je doit mettre dans les deux fonctions de converter, je demande vraiment votre aide
le code de la page JSF matiere.xhtml est:
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 56
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<h:head><title>matieres enseignés</title></h:head>
<h:body>
<h:form>
<div id="header">
<ui:insert name="header">
<ui:include src="layout_admin.xhtml"/>
</ui:insert>
</div>
<p:spacer height="40px"/>
<p:tabView id="t">
<p:tab title="matiere ">
<p:growl id="growl" showDetail="true" sticky="true" />
<p:panelGrid columns="1" >
<h:outputText value="Nom matiere" ></h:outputText>
<h:inputText value="#{matiereBean.matiere.nomMat}" id="nomMat" requiredMessage="nom obligatoire"></h:inputText>
<h:outputText value="Coefficient matiere" ></h:outputText>
<h:inputText value="#{matiereBean.matiere.coefMat}" id="coff" requiredMessage="coefficient obligatoire"></h:inputText>
<h:outputText value="Nom Unité Enseignement" ></h:outputText>
<p:selectOneMenu value="#{uniteBean.unite}" var="u" converter="uniteConverter" >
<f:selectItem itemLabel="choisir nom unité:" itemValue="" />
<f:selectItems value="#{uniteBean.lst_unite}" var="unite"
itemLabel="#{unite.nomUnit}" itemValue="#{unite}" />
<p:column>#{u.nomUnit}</p:column>
</p:selectOneMenu>
</p:panelGrid>
<p:commandButton value="Ajouter" icon="ui-icon-disk"
actionListener="#{matiereBean.ajouterMatiere}" update="growl"> </p:commandButton>
<p:commandButton type="reset" value="Annuler" />
</p:tab></p:tabView>
</h:form>
</h:body>
</html> |