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

cs_enmaai 22 Messages postés jeudi 16 décembre 2010Date d'inscription 14 juin 2011 Dernière intervention - 16 mai 2011 à 20:04 - Dernière réponse : cs_enmaai 22 Messages postés jeudi 16 décembre 2010Date d'inscription 14 juin 2011 Dernière intervention
- 18 mai 2011 à 18:20
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
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
cs_Julien39 6450 Messages postés mardi 8 mars 2005Date d'inscription 17 mai 2018 Dernière intervention - 18 mai 2011 à 16:02
3
Merci
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.

Merci cs_Julien39 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de cs_Julien39
cs_Julien39 6450 Messages postés mardi 8 mars 2005Date d'inscription 17 mai 2018 Dernière intervention - 17 mai 2011 à 10:56
0
Merci
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"
Commenter la réponse de cs_Julien39
cs_enmaai 22 Messages postés jeudi 16 décembre 2010Date d'inscription 14 juin 2011 Dernière intervention - 18 mai 2011 à 13:22
0
Merci
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
Commenter la réponse de cs_enmaai
cs_Julien39 6450 Messages postés mardi 8 mars 2005Date d'inscription 17 mai 2018 Dernière intervention - 18 mai 2011 à 13:33
0
Merci
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
Commenter la réponse de cs_Julien39
cs_enmaai 22 Messages postés jeudi 16 décembre 2010Date d'inscription 14 juin 2011 Dernière intervention - 18 mai 2011 à 14:14
0
Merci
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
Commenter la réponse de cs_enmaai
cs_Julien39 6450 Messages postés mardi 8 mars 2005Date d'inscription 17 mai 2018 Dernière intervention - 18 mai 2011 à 14:18
0
Merci
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.
Commenter la réponse de cs_Julien39
cs_enmaai 22 Messages postés jeudi 16 décembre 2010Date d'inscription 14 juin 2011 Dernière intervention - 18 mai 2011 à 15:55
0
Merci
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
Commenter la réponse de cs_enmaai
cs_enmaai 22 Messages postés jeudi 16 décembre 2010Date d'inscription 14 juin 2011 Dernière intervention - 18 mai 2011 à 18:20
0
Merci
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>
Commenter la réponse de cs_enmaai

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.