bONJOUR TOUT LE MONDE,
je travaille avec hibernate 2 et jsf 1.2 et Oracle 10g sous eclipse europa.
je suis bloquée ca fait 4 jours sur un probleme que j'ai avec jsf/hibernate,
donc, j'ai deux tables: programme et devises, dont voilà les fichier .hbm:
Programme.hbm
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" >
<hibernate-mapping package="com.projet.hibernate">
<class name="Programme" table="PROGRAMME" dynamic-update="true" dynamic-insert="true" select-before-update="false">
<id
column="ID_PROGRAMME"
name="IdProgramme"
type="integer"
>
<generator class="increment" />
</id>
<property
column="DESCRIPTION_PROGRAMME"
length="200"
name="DescriptionProgramme"
not-null="false"
type="string"
/>
<property
column="OBJET_PROGRAMME"
length="200"
name="ObjetProgramme"
not-null="false"
type="string"
/>
<property
column="REGLEMENTATION_PROGRAMME"
length="200"
name="ReglementationProgramme"
not-null="false"
type="string"
/>
<property
column="OBSERVATION_PROGRAMME"
length="200"
name="ObservationProgramme"
not-null="false"
type="string"
/>
<property
column="MONTANT_PROGRAMME"
length="126"
name="MontantProgramme"
not-null="false"
type="java.lang.Float"
/>
<property
column="DESIGNATION_PROGRAMME"
length="200"
name="DesignationProgramme"
not-null="false"
type="string"
/>
<many-to-one
class="Devises"
name="IdDevise"
not-null="true"
cascade="all"
>
<column name="ID_DEVISE" />
</many-to-one>
</class>
</hibernate-mapping>
devises.hbm
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" >
<hibernate-mapping package="com.projet.hibernate">
<class name="Devises" table="DEVISES">
<id
column="ID_DEVISE"
name="IdDevise"
type="integer"
>
<generator class="vm" />
</id>
<property
column="NOM_DEVISE"
length="20"
name="NomDevise"
not-null="false"
type="string"
/>
<property
column="PAYS_DEVISE"
length="20"
name="PaysDevise"
not-null="false"
type="string"
/>
<property
column="DATETAUXCHANGE_DEVISE"
length="20"
name="DatetauxchangeDevise"
not-null="false"
type="string"
/>
<property
column="TAUXCHANGE_DEVISE"
length="126"
name="TauxchangeDevise"
not-null="false"
type="java.lang.Float"
/>
<set inverse="true" name="PROGRAMMESet" lazy="true" cascade="all" >
<key column="ID_DEVISE" />
<one-to-many class="Programme" />
</set>
</class>
</hibernate-mapping>
et ma page jsf qui insere un nouveau programme dans la table programme (
ges_programme_ajouter.jsp) est:
<%@taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<f:view>
<html>
<head>
<title>Gestion des programmes: Ajout</title>
<link rel="stylesheet" href="extra.css" type="text/css"></link>
<script language="JavaScript" src="JScripts.js"></script>
</head>
<body>
<h:form>
<table width="752" border="1" cellspacing="2" class="texte">
<tr>
<td width="207">Désignation</td>
<td colspan="2"><h:inputText id="designationProgramme" value="#{programme.designationProgramme}" /></td>
</tr>
<tr>
<td>Objet</td>
<td colspan="2"><h:inputTextarea id="objetProgramme" value="#{programme.objetProgramme}" /></td>
</tr>
<tr>
<td>Description</td>
<td colspan="2"><h:inputTextarea id="descriptionProgramme" value="#{programme.descriptionProgramme}" /></td>
</tr>
<tr>
<td style="width: 192px">Observation</td>
<td colspan="2"><h:inputTextarea id="observationProgramme" value="#{programme.observationProgramme}" /></td>
</tr>
<tr>
<td >Montant</td>
<td style="width: 291px"><h:inputText id="montantProgramme" value="#{programme.montantProgramme}" style="width: 113px"/>
<h:selectOneMenu value="#{programme.idDevise.idDevise}" >
<f:selectItems id="idDevise" value="#{devises.listeDevises}"/>
</h:selectOneMenu>
</td>
<td width="265" style="width: 133px"> </td>
</tr>
<tr>
<td >Reglements</td>
<td colspan="2">
<h:selectOneMenu value='#{programme.reglementationProgramme}' >
<f:selectItem itemLabel="Directive BM" itemValue="Directive BM" />
<f:selectItem itemLabel="Reglementation internationnale" itemValue="Reglementation internationnale"/>
</h:selectOneMenu>
</td>
</tr>
<tr>
<td align="center" height="58" colspan="3">
<h:commandButton value="Ajouter" action="#{programme.ValiderForm}" ></h:commandButton>
<h:commandButton value="Annuler" ></h:commandButton>
</td>
</tr>
</table>
</h:form>
</body>
</html>
</f:view>
les classes beans je les ai crée automatiquement à l'aide de hibernate synchronizer sous eclipse europa, auxequls j'ai ajouté les deux méthodes suivantes:
dans Programme.java
private List<Programme> ListeProgrammes=null;
public void ValiderForm(){
int IdProgramme=new Integer(44);;
String Designation=this.getDesignationProgramme();
String Objet=this.getObjetProgramme();
String Description=this.getDescriptionProgramme();
String Observation=this.getObservationProgramme();
Float Montant=this.getMontantProgramme();
Float MontantdirhamProgramme=this.getMontantdirhamProgramme();
String Reglementation=this.getReglementationProgramme();
//insertion dans la table COMPTE
try {
Session session = HibernateUtil.currentSession();
Transaction tx = session.beginTransaction();
Programme prog = new Programme();
prog.setIdProgramme(IdProgramme);
prog.setObjetProgramme(Objet);
prog.setDesignationProgramme(Designation);
prog.setDescriptionProgramme(Description);
prog.setObservationProgramme(Observation);
prog.setMontantProgramme(Montant);
prog.setMontantdirhamProgramme(MontantdirhamProgramme);
prog.setReglementationProgramme(Reglementation);
Devises dvs=new Devises();
int IdDevise=this.getIdDevise().getIdDevise();
dvs.getDetailDevise(IdDevise);
prog.setIdDevise(dvs);
session.save(prog);
System.out.println("Données prog enregistrées");
tx.commit();
HibernateUtil.closeSession();
System.out.println("transaction validée, session fermée");
} catch (HibernateException e) {
e.printStackTrace();
}
}
FICHIER Devises.java
private List<SelectItem> ListeDevises=null;
public Devises getDetailDevise(int IdDevises){
Devises ddvs=new Devises();
//lecture des comptes existants à partir de la table compte
try {
Session session = HibernateUtil.currentSession();
List list = session.find("from Devises where IdDevises="+IdDevises);
ddvs = (Devises)list.get(0);
HibernateUtil.closeSession();
} catch (HibernateException e) {
e.printStackTrace();
}
return ddvs;
}
public List<SelectItem> getListeDevises(){
//lecture des comptes existants à partir de la table compte
try {
Session session = HibernateUtil.currentSession();
List list = session.find("from Devises");
Iterator it = list.iterator();
ListeDevises= new ArrayList<SelectItem>();
while(it.hasNext()) {
Devises dvs = (Devises)it.next();
System.out.println("IdDevise = "+dvs.getIdDevise()+" devise Nom= "+dvs.getNomDevise());
ListeDevises.add(new SelectItem(dvs.getIdDevise(),dvs.getNomDevise()));
}
HibernateUtil.closeSession();
} catch (HibernateException e) {
e.printStackTrace();
}
return ListeDevises;
}
lors de l'execution du fichierr .jsf, je recois cette exception:
exception
javax.servlet.ServletException: /ges_programmes_ajouter.jsp(45,5) '#{programme.idDevise.idDevise}' Target Unreachable, 'idDevise' returned null
javax.faces.webapp.FacesServlet.service(FacesServlet.java:277)
cause mère
org.apache.jasper.el.JspPropertyNotFoundException: /ges_programmes_ajouter.jsp(45,5) '#{programme.idDevise.idDevise}' Target Unreachable, 'idDevise' returned null
org.apache.jasper.el.JspValueExpression.getType(JspValueExpression.java:61)
com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getConvertedValue(HtmlBasicInputRenderer.java:92)
com.sun.faces.renderkit.html_basic.MenuRenderer.convertSelectOneValue(MenuRenderer.java:188)
com.sun.faces.renderkit.html_basic.MenuRenderer.getConvertedValue(MenuRenderer.java:301)
javax.faces.component.UIInput.getConvertedValue(UIInput.java:942)
javax.faces.component.UIInput.validate(UIInput.java:868)
javax.faces.component.UIInput.executeValidate(UIInput.java:1072)
javax.faces.component.UIInput.processValidators(UIInput.java:672)
javax.faces.component.UIForm.processValidators(UIForm.java:235)
javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1053)
javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:673)
com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76)
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
note La trace complète de la cause mère de cette erreur est disponible dans les fichiers journaux de Apache Tomcat/6.0.16.
Merci de m'aider
Configuration: Windows XP
Internet Explorer 7.0