Insertion vers une base de donnée à partir d'une page jsf [Résolu]

Signaler
Messages postés
22
Date d'inscription
jeudi 16 décembre 2010
Statut
Membre
Dernière intervention
14 juin 2011
-
Messages postés
22
Date d'inscription
jeudi 16 décembre 2010
Statut
Membre
Dernière intervention
14 juin 2011
-
salut
voilà je veux faire l'ajout des données vers une base oracle à partir d'une page jsf
mais ça ne marche pas, quand j'introduis les données et je clique sur le bouton "envoyer" il s'affiche:

An Error Occurred:
javax.el.MethodNotFoundException: Method not found: InsertAction@1f6c1c1.insert()


voici le code:
ma page jsf:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
<f:view>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>user</title>
</head>

<h:form>


username, <h:inputText value="#{InsertAction.username}" size="10" />,             job position, <h:inputText value="#{InsertAction.jobposition}" size="10" />

<h:commandButton id="submit" value="envoyer " style="width: 175px" action="#{InsertAction.insert}"></h:commandButton>


</h:form>

</html>
</f:view>
---------------------------------------------
voici mon bean:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

import java.sql.Connection;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import java.sql.*;
import java.sql.DriverManager;



/**
*
* @author utilisateur
*/
@ManagedBean(name="InsertAction")
@SessionScoped
public class InsertAction {

private String username;
private String jobposition;

Connection con = null;



public void setusername(String username){
this.username=username;
}
public void setjobposition(String jobposition){
this.jobposition=jobposition;
}

public String getusername()
{
return username;
}

public String getjobposition()
{
return jobposition;
}
public void connexionBD() {



try

{
String URL = "jdbc:oracle:thin:@localhost:1521:gmao";
String USER = "pfe";
String PASSWD = "gmao";

con =DriverManager.getConnection(URL,USER, PASSWD);
System.out.println ("connexion base pfe etablie");
}
catch(Exception e)
{
System.out.println ("erreur: base introuvable");

}}
public void insert(String requete) throws SQLException{

Statement st = con.createStatement();




int val = 0;
try {
val = st.executeUpdate("insert user_details values('" + username + "','" + jobposition + "')");
} catch (SQLException ex) {
Logger.getLogger(InsertAction.class.getName()).log(Level.SEVERE, null, ex);
}

System.out.println(val);
}

}
--------------------
le problème réside au niveau de la fonction insert() mais je ne sais pas comment la corriger
2) est-ce que je doit ajouter "commit" à la fin pour que l'insertion s'effectue réellement ç-à dire quand je consulte ma table oracle je peux trouver les données que j'ai insérées à partir de la page jsf
je vous remercie
A voir également:

8 réponses

Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
340
C'est ta connexion, elle est nulle, ta méthode qui initialise la connexion doit être appellée dans le constructeur ou dans la méthode insert.

Met un point d'arret, les nullPointer sont faciles à voir.
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
340
Tans ta page jsp, tu fais appel à la fonction insert ; or, ta fonction insert ne possède pas les bons arguments : les fonctions appellées doivent retourner un String et ne doivent pas avoir de paramètres.

De plus, ta connexion n'est japais initialisée, tu n'as pas de constructeur sans paramètre.

Et enfin, ajoute sur ton bouton un ajax="false"
Messages postés
22
Date d'inscription
jeudi 16 décembre 2010
Statut
Membre
Dernière intervention
14 juin 2011

Merci Julien pour cette réponse
j'ai fait les modifications nécessaires au niveau de bean
mais je n'ai pas compris comment
"ajoute sur ton bouton un ajax="false" "
est-ce que je dois ajouter la balise
<f:ajax execute= "...."/> car cette fois quand je clique sur le bouton"envoyer" il s'affiche:
An Error Occurred:
viewId:/welcomeJSF.jsp - La vue /welcomeJSF.jsp na pas pu être restaurée.
voici mon bean:
-----------------------------------------------
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

import java.sql.Connection;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import java.sql.*;
import java.sql.DriverManager;



/**
*
* @author utilisateur
*/
@ManagedBean(name="InsertAction")
@SessionScoped
public class InsertAction {

private String username;
private String jobposition;

Connection con = null;

String s=null;

public void setusername(String username){
this.username=username;
}
public void setjobposition(String jobposition){
this.jobposition=jobposition;
}

public String getusername()
{
return username;
}

public String getjobposition()
{
return jobposition;
}
public void connexionBD() {

try
{
Class.forName("oracle.jdbc.driver.OracleDriver");
System.out.println ("driver etablie");
}
catch(Exception e)
{
System.out.println ("erreur:Driver int" +
"rouvable");
}




try

{
String URL = "jdbc:oracle:thin:@localhost:1521:gmao";
String USER = "pfe";
String PASSWD = "gmao";

con =DriverManager.getConnection(URL,USER, PASSWD);
System.out.println ("connexion base pfe etablie");
}
catch(Exception e)
{
System.out.println ("erreur: base introuvable");

}}
public String insert() throws SQLException{
String resultat="";
Statement st = con.createStatement();




int val = 0;
try {
val = st.executeUpdate("insert into user_details values('"+ username +"','" + jobposition + "')");
} catch (SQLException ex) {
Logger.getLogger(InsertAction.class.getName()).log(Level.SEVERE, null, ex);
}

System.out.println(val);
return resultat;
}
/** Creates a new instance of InsertAction */

public InsertAction(){

}
public static void main (String args[]) throws SQLException{

InsertAction B= new InsertAction ();
B.connexionBD();
B.insert();
}



}
-----------------------------------------
Pourriez-vous m'indiquer ce que je dois ajouter exactement dans ma page jsp

je vous remercie
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
340
Je ne comprends pas pourquoi tu as une main dans ton managedBean et pourquoi rien n'est initialisé.

La fonction possède maintenant la bonne signature et les bons attributs (c'est à dire aucun) mais tu n'as toujours pas créé de constructeur, ce qui peut te posser des problèmes, initialise les valeurs de tes attributs avec les valeurs que tu veux avoir dans ton écran "".

Et essayes de respecter les conventions d'écriture de code java, tu seras plus facile à relire.

Pour ajax="false", je ne suis pas certain qu'il faille le mettre ici, je n'utilise jamais les composants html classiques et je mets toujours dans les balises de mes bouton ajax="false" comme ca <p:commandButton ajax="false"... Essaye avec et sans, on verra bien
Messages postés
22
Date d'inscription
jeudi 16 décembre 2010
Statut
Membre
Dernière intervention
14 juin 2011

Salut julien
je n'est pas compris est-ce que je doit enlever la fonction main
et pour la création de constructeur et l'initialisation des attribut
je doit mettre :
public InsertAction(){

username=" ";
jobposition=" ";
}
pourriez vous m'expliquer d'avantage s'il vous plait
je vous remercie
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
340
Pour le constructeur, c'est ca, ca évite à tes objets d'être nuls.

La fonction main ne gène pas, mais elle ne sert à rien.

Quand le managedBean est créé, son constructeur avec aucun attribut est automatiquement appelé, il est donc intéressant d'initialiser tes attributs dans ce constructeur.
Messages postés
22
Date d'inscription
jeudi 16 décembre 2010
Statut
Membre
Dernière intervention
14 juin 2011

aprés la modification du code un nouveau message d'erreur est apparu :

An Error Occurred:
java.lang.NullPointerException

javax.faces.el.EvaluationException: java.lang.NullPointerException
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
at javax.faces.component.UICommand.broadcast(UICommand.java:315)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:775)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1267)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:312)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:332)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:233)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.NullPointerException
at InsertAction.insert(InsertAction.java:80)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.sun.el.parser.AstValue.invoke(AstValue.java:234)
at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:297)
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
... 32 more

je pense que c'est à cause de la fonction insert
pourriez vous m'aider s'il vous plait
je vous remercie
Messages postés
22
Date d'inscription
jeudi 16 décembre 2010
Statut
Membre
Dernière intervention
14 juin 2011

vous avez raison le problème été au niveau de la connexion

mais ça marche maintenant, un grand merci à Julien
voici le code pour les intéressés
----------------

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

import java.sql.Connection;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import java.sql.*;
import java.sql.DriverManager;



/**
*
* @author utilisateur
*/
@ManagedBean(name="InsertAction")
@SessionScoped
public class InsertAction {

private String username;
private String jobposition;

Connection con ;

String s=null;

public void setusername(String username){
this.username=username;
}
public void setjobposition(String jobposition){
this.jobposition=jobposition;
}

public String getusername()
{
return username;
}

public String getjobposition()
{
return jobposition;
}
public String connexionBD() throws SQLException {
String result=" ";

try
{
Class.forName("oracle.jdbc.driver.OracleDriver");
System.out.println ("driver etablie");
}
catch(Exception e)
{
System.out.println ("erreur:Driver int" +
"rouvable");
}




try

{
String URL = "jdbc:oracle:thin:@localhost:1521:gmao";
String USER = "pfe";
String PASSWD = "gmao";

con =DriverManager.getConnection(URL,USER, PASSWD);
System.out.println ("connexion base pfe etablie");
}
catch(Exception e)
{
System.out.println ("erreur: base introuvable");

}


Statement st = con.createStatement();




int val = 0;
try {
val = st.executeUpdate("insert into user_details values('"+ username +"','" + jobposition + "')");
} catch (SQLException ex) {
Logger.getLogger(InsertAction.class.getName()).log(Level.SEVERE, null, ex);
}

System.out.println(val);
return result;
}
/** Creates a new instance of InsertAction */

public InsertAction(){

username=" ";
jobposition=" ";

}
/**
public static void main (String args[]) throws SQLException{

InsertAction B= new InsertAction ();
B.connexionBD();
B.insert();
}

*/

}
------------------------------
page jsf

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
<f:view>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>user</title>
</head>

<h:form>



username, <h:inputText value="#{InsertAction.username}" size="10" />,             jobposition, <h:inputText value="#{InsertAction.jobposition}" size="10" />

<h:commandButton id="submit" value="Confirmer " style="width: 175px" action="#{InsertAction.connexionBD}" ></h:commandButton>

</h:form>

</html>
</f:view>