Pb AJOUT d'1 nouvel enregistrement jsf/hibern

Fermé
lucky82 Messages postés 89 Date d'inscription samedi 30 octobre 2004 Statut Membre Dernière intervention 16 juin 2008 - 25 mai 2008 à 13:08
 JustForYou - 6 mai 2009 à 03:06
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.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&eacute;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

2 réponses

lucky82 Messages postés 89 Date d'inscription samedi 30 octobre 2004 Statut Membre Dernière intervention 16 juin 2008
26 mai 2008 à 09:56
personne ne peux m'aider les amis?!
0
delivrance84 Messages postés 8 Date d'inscription jeudi 17 juillet 2008 Statut Membre Dernière intervention 13 avril 2009
19 juil. 2008 à 22:32
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.
0
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 :)
0