Pb AJOUT d'1 nouvel enregistrement jsf/hibern
lucky82
Messages postés
89
Statut
Membre
-
JustForYou -
JustForYou -
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
devises.hbm
et ma page jsf qui insere un nouveau programme dans la table programme (ges_programme_ajouter.jsp) est:
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
FICHIER Devises.java
lors de l'execution du fichierr .jsf, je recois cette exception:
Merci de m'aider
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.org/dtd/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.org/dtd/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="https://www.oracle.com/java/technologies/" prefix="f" %> <%@taglib uri="https://www.oracle.com/java/technologies/" prefix="h" %> <%@taglib uri="https://www.oracle.com/java/technologies/" 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
2 réponses
-
-
bonjour,
moi aussi j'ai rencontré le meme probleme que vous ,est ce qu'il ya quelqu'un qui est arrivé à une solution?
lucky82 si vous ête arriver à une solution, s'il vous plais passe moi la réponse je suis vraiment bloquée et Merci d'avance.-
Changer tes fichiers sur cette forme :
hibernate.cfg.xml:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration
PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
"http://hibernate.org/dtd/hibernate-configuration-2.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- local connection properties -->
<property name="hibernate.connection.url">Votre URL</property>
<property name="hibernate.connection.driver_class">Votre Driver</property>
<property name="hibernate.connection.username">login</property>
<property name="hibernate.connection.password" />
<!-- property name="hibernate.connection.pool_size"></property -->
<!-- dialect for Oracle : choisir l'un des deux
1- # Oracle (any version) - org.hibernate.dialect.OracleDialect
2- # Oracle 9 - org.hibernate.dialect.Oracle9Dialect -->
<property name="dialect">Votre choix</property>
<!--********-->
<property name="hibernate.show_sql">false</property>
<property name="hibernate.use_outer_join">true</property>
<!-- Mettre en commentaire
<property name="hibernate.transaction.factory_class">
net.sf.hibernate.transaction.JTATransactionFactory
</property>
<property name="jta.UserTransaction">java:comp/UserTransaction</property>
//-->
<!--Ajouter les lignes suivants-->
<property name="hibernate.transaction.factory_class">
net.sf.hibernate.transaction.JDBCTransactionFactory
</property>
<mapping resource="Personne.hbm" />
</session-factory>
</hibernate-configuration>
Personne.hbm
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping
PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.org/dtd/hibernate-mapping-2.0.dtd">
<hibernate-mapping>
<class name="hiber.Personne" table="Personne">
<id name="Id" type="integer">
<column name="id" sql-type="int(4)"/>
<generator class="assigned" /> <!-- ou bien class="increment" d'une façon automatique -->
</id>
<property name="Nom" type="string">
<column name="nom" sql-type="char(20)" not-null="true"/>
</property>
<property name="Prenom" type="string">
<column name="prenom" sql-type="char(20)" not-null="true"/>
</property>
</class>
</hibernate-mapping>
Bon chance :)
-