我在jsp文件中使用jsf创建了一个注册表单,我尝试将其与Web服务连接,以便将这些元素传递给数据库。
当我按下提交按钮时,我收到错误消息。我不认为问题涉及连接代码,但我不确定。
有人能告诉我一些可能在某种程度上对我有帮助吗?
错误:
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)
我的表格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>
我的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";
}
}
和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>
答案 0 :(得分:20)
java.lang.NoClassDefFoundError:org / apache / commons / discovery / tools / DiscoverSingleton
这只是意味着webapp的运行时类路径中缺少所提到的类(或包含该类的JAR文件)。
当包名称提示时,该类是Apache Commons Discovery的一部分,可在http://commons.apache.org/discovery下载。如果您只是将其JAR文件放在webapp的/WEB-INF/lib
中(由webapp的运行时类路径覆盖),那么此错误应该会消失。
请注意,此问题与java.lang
包。
答案 1 :(得分:15)
执行测试时项目类路径中缺少指定的类。
解决方案是将以下依赖项添加到您的pom:
<dependency>
<groupId>commons-discovery</groupId>
<artifactId>commons-discovery</artifactId>
<version>0.5</version>
<scope>test</scope>
</dependency>