J'ai créé un formulaire d'inscription en fichier jsp avec jsf et j'essaye de le connecter avec un service web afin de passer par là les éléments à une base de données.
Lorsque j'appuie sur le bouton Envoyer, j'obtiens une erreur. Je ne pense pas que le problème concerne le code de connexion mais je ne suis pas sûr.
Quelqu'un peut-il me dire quelque chose qui peut m'aider d'une manière ou d'une autre?
erreur:
javax.servlet.ServletException: #{formabean.submitdetails}: Java.lang.NoClassDefFoundError: org/Apache/commons/discovery/tools/DiscoverSingleton
javax.faces.webapp.FacesServlet.service(FacesServlet.Java:256)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.Java:390)
ma forme jsp:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="f" uri="http://Java.Sun.com/jsf/core"%>
<%@taglib prefix="h" uri="http://Java.Sun.com/jsf/html"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<f:view>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>Form</title>
</head>
<body>
<div align="right" >
<p>
<br>.............
<h:commandButton value="submit" type="submit"
action="#{formabean.submitdetails}" />
</h:form>
</body>
</html>
</f:view>
ma classe Bean "formavar":
package org.forma;
import org.imigrant.Migration.MigrationResult;
import org.imigrant.Migration.MigrationWS_PortType;
import org.imigrant.Migration.MigrationWS_Service;
import org.imigrant.Migration.MigrationWS_ServiceLocator;
/** libraries for Web Service*/
/**
*
* @author USER
*/
public class formavar {
private String name;
private String lastname;.....
public String getName() {
return name;
}
/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}
/**
* @return the surname
*/
public String getLastname() {
return lastname;
}
/**
* @param surname the surname to set
*/
public void setLastname(String lastname) {
this.lastname = lastname;
}......
public String submitdetails() {
String migrationURL = "http://localhost:8080/mule-Tomcat/ESB/Migration?wsdl";
MigrationResult registrationResult = new MigrationResult();
try {
MigrationWS_Service service = new MigrationWS_ServiceLocator(migrationURL);
MigrationWS_PortType port = service.getMigrationImplPort();
registrationResult = port.registerDoc(
null,
this.granting,
this.expire_date,
this.name,
this.lastname,.............
);
return "OK";
} catch (Exception ex) {
return "ERROR "+ex.getMessage();
}
//return "OK";
}
}
et le config xml:
<managed-bean>
<managed-bean-name>formabean</managed-bean-name>
<managed-bean-class>org.forma.formavar</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
Java.lang.NoClassDefFoundError: org/Apache/commons/discovery/tools/DiscoverSingleton
Cela signifie simplement que la classe mentionnée (ou un fichier JAR contenant la classe) est manquante dans le chemin de classe d'exécution de la webapp.
Comme l'indique le nom du package, la classe fait partie d'Apache Commons Discovery qui est disponible en téléchargement sur http://commons.Apache.org/discovery . Si vous déposez simplement ses fichiers JAR dans /WEB-INF/lib
de votre application Web (qui est couverte par le chemin d'accès aux classes d'exécution de l'application Web), cette erreur devrait disparaître.
Notez que ce problème n'a rien à voir avec JSF/JSP, encore moins Java EE. C'est juste du Java de base. La cause première de l'exception indique également que c'est du Java.lang
paquet.
Les classes spécifiées sont manquantes dans le chemin d'accès aux classes du projet au moment de l'exécution du test.
La solution consiste à ajouter la dépendance suivante à votre pom:
<dependency>
<groupId>commons-discovery</groupId>
<artifactId>commons-discovery</artifactId>
<version>0.5</version>
<scope>test</scope>
</dependency>