【问题标题】:NoSuchMethodError: model.AddEvents.getStartDate()Ljava/lang/String;NoSuchMethodError: model.AddEvents.getStartDate()Ljava/lang/String;
【发布时间】:2017-07-26 09:23:57
【问题描述】:

我不知道这里发生了什么。我使用 Date 数据类型将我的数据保存在我的数据库中,它一直给出这个错误-Error Accessing Database:javax.servlet.ServletException: java.lang.NoSuchMethodError: model.AddEvents.getStartDate()Ljava/lang/String;.I '我很确定我的 servlet 部分有错误。我认为问题在于在我的 servlet 和 java bean 中使用 Date 类型,因为最初我使用字符串并且它工作得很好。请帮助大家:)

   package model;

import java.util.Date;
public class AddEvents{
 private String title;
 private String eventDesc;
 private String StartTime;
 private String  EndTime;
 private double Budget;
 private java.util.Date StartDate;
 private java.util.Date EndDate;

 public String getTitle() {
    return title;
}
public void setTitle(String title) {
    this.title = title;
}
public String getEventDesc() {
    return eventDesc;
}
public void setEventDesc(String eventDesc) {
    this.eventDesc = eventDesc;
}

public String getStartTime() {
    return StartTime;
}
public void setStartTime(String startTime) {
    StartTime = startTime;
}
public String getEndTime() {
    return EndTime;
}
public void setEndTime(String endTime){
    EndTime=endTime;
}

public double getBudget() {
    return Budget;
}
public void setBudget(double budget) {
    Budget = budget;
}
public java.util.Date getStartDate() {
    return StartDate;
}
public void setStartDate(java.util.Date startDate) {
    StartDate = startDate;
}
public java.util.Date getEndDate() {
    return EndDate;
}
public void setEndDate(java.util.Date endDate) {
    EndDate = endDate;
}

}


AddEventsServlet:
package servlet;

import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.ListIterator;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import database.DBAO;
import database.Delete;
import model.AddEvents;


/**
 * Servlet implementation class AddEventsServlet
 */
@WebServlet("/AddEventsServlet")
public class AddEventsServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public AddEventsServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        //response.getWriter().append("Served at: ").append(request.getContextPath());
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        //doGet(request, response);


        AddEvents myEvent = new AddEvents();
        //create an object based on the Java class customers


        //Assignment of data
        myEvent.setTitle(request.getParameter("Title"));
        myEvent.setEventDesc(request.getParameter("EventDesc"));
        myEvent.setStartTime(request.getParameter("StartTime"));
        myEvent.setEndTime(request.getParameter("EndTime"));
        myEvent.setBudget(Double.valueOf(request.getParameter("Budget")));
        myEvent.setStartDate(java.sql.Date.valueOf(request.getParameter("StartDate")));
        myEvent.setEndDate(java.sql.Date.valueOf(request.getParameter("EndDate")));

        String title = request.getParameter("Title");
        String eventDesc= request.getParameter("EventDesc");
        String StartTime=request.getParameter("StartTime");
        String EndTime =request.getParameter("EndTime");
        double Budget=Double.valueOf(request.getParameter("Budget") );
        //double Budget=request.getParameter("Budget");
        Date StartDate=java.sql.Date.valueOf(request.getParameter("StartDate"));
        Date EndDate=java.sql.Date.valueOf(request.getParameter("EndDate"));



        System.out.println(myEvent.getTitle());
        System.out.println(myEvent.getEventDesc());
        System.out.println(myEvent.getStartTime());
        System.out.println(myEvent.getEndTime());
        System.out.println(myEvent.getBudget());
        //System.out.println(myEvent.getStartDate());
        //System.out.println(myEvent.getEndDate());
        java.util.Date date = myEvent.getStartDate();
          SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
          System.out.println(sdf.format(date));

          java.util.Date date1 = myEvent.getEndDate();
          SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
          System.out.println(sdf1.format(date1));

        request.setAttribute("Title",title);
        request.setAttribute("Details",eventDesc);
        request.setAttribute("Start Time",StartTime);
        request.setAttribute("End Time",EndTime);
        request.setAttribute("Budget",Budget);
        request.setAttribute("Start Date",StartDate);
        request.setAttribute("End Date",EndDate);

        try
        {
            DBAO myDatabase = new DBAO();
            ArrayList <AddEvents> myEventList = myDatabase.getAddEvents(); //not needed
            //AddEvents myEventDetails =myDatabase.isEvent(myEvent,title, eventDesc, StartTime, EndTime, Budget); //not needed

            HttpSession myRequest = request.getSession(true); //not needed
            request.setAttribute("EventList",myEventList); //not needed
            System.out.println(myEventList.size()); //not needed

            // you comment out the method that insert data to database
            myDatabase.AddEvents(myEvent,title,eventDesc,StartTime,EndTime,Budget,StartDate,EndDate);
            // the dispatcher can go to RetrieveServlet and let it handle the retrieve
            //myDatabase.delete(myEvent,title,eventDesc,StartTime,EndTime,Budget,StartDate,EndDate);
            //name of delete database
            request.getRequestDispatcher("Retrieve.jsp").forward(request, response);

    }catch(Exception ex)
        {
            System.out.println("Error Accessing Database:" +ex);
        }

    }

}

Retrieve.jsp:添加这个因为我刚刚意识到我的控制台在这个 jsp 页面中显示错误 - Retrieve.jsp:java:183 它说

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<%@page import="model.AddEvents,java.util.ArrayList,java.util.ListIterator" %>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>


<script language="javascript">
function deleteRecord(id){
    var f=document.form;
    f.method="AddEvents";
    f.action='delete.jsp?id='+id;
    f.submit();
}
</script>


</head>
<body>
<%!ArrayList<AddEvents> myEventList; //have to declear in a declaration tag for access in the page %>
<% myEventList = (ArrayList<AddEvents>) request.getAttribute("EventList");
if(myEventList.size() == 0)
{
    %>
    <h2>No events</h2>
    <%
}
else
{
    %>

<table>
<%
ListIterator<AddEvents> li = myEventList.listIterator();

while(li.hasNext())
{
    AddEvents myEvent = new AddEvents();
    myEvent= (AddEvents)li.next();
    %>

 <%AddEvents event =(AddEvents)session.getAttribute("Event_Info"); %>
<tr><td>Title:</td><td><%= myEvent.getTitle() %></td><td></td></tr>
<tr><td>Details:</td><td><%= myEvent.getEventDesc() %></td><td> </td></tr>
<tr><td>StartTime:</td><td><%=myEvent.getStartTime() %></td><td></td></tr>
<tr><td>EndTime:</td><td><%= myEvent.getEndTime() %></td><td></td></tr>
<tr><td>Budget:</td><td><%=myEvent.getBudget()%></td><td></td></tr>
<tr><td>StartDate:</td><td><%=myEvent.getStartDate() %></td><td></td></tr>
<tr><td>EndDate:</td><td><%=myEvent.getEndDate() %></td>
<tr><td> <a href="delete.jsp"><img border="0" alt="delete" src="deleteIcon.png" width="20" height="20"></a></td>
<td><a href="AddEvent.jsp"><img border="0" alt="update" src="updateIcon.png" width="100" height="100"></a></td>
</tr>

<%}


%>
</table>
<%
}
%>
<input id='eventID' type="hidden" name="hiddEvent" value="">
<a href="AddEvent.jsp">Add Event</a>
</body>
</html>

【问题讨论】:

  • AddEvents 类是什么?
  • @Berger 我的 java bean 类
  • 你能把这个类添加到你的问题中吗?
  • 添加AddEvents 类的代码,并告诉我一个原因,即为什么您再次从请求中获取参数值,因为您已经使用它们来设置事件(似乎在您的代码中......)
  • 我刚刚添加了类并删除了 Servlet 代码,因为我不能同时发布两者。它一直在说我需要添加更多信息:(

标签: java jsp javabeans nosuchmethoderror


【解决方案1】:

你应该解析你的日期而不是System.out.println(myEvent.getStartDate());

Date date = myEvent.getStartDate()
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");   
System.out.println(sdf.format(date));

【讨论】:

  • 但是我把这个放在哪里?因为我把它放在我的servlet中,没有区别。同样的错误
  • 而不是行 System.out.println(myEvent.getStartDate());
  • 谢谢。我这样做了,它仍然显示相同的错误。
【解决方案2】:

问题在于您的导入类型;

您导入了java.sql.Date,但您愿意使用java.util.Date 功能,这是我们在使用IDE 获取建议时常犯的错误,并且没有寻找其他可用的导入,我们选择了最上面的那个.. 所以不要'不要惊慌。

修改导入后,它应该可以正常工作。

为了测试你可以按照@user7294900给出的解决方案

你应该解析你的日期而不是System.out.println(myEvent.getStartDate());

Date date = myEvent.getStartDate(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println(sdf.format(date));

如果仍然无法正常工作,那么至少旧错误现在肯定已经消失了。如果任何错误仍然存​​在,请发布,它将帮助我们和其他人了解更多信息。 :)

【讨论】:

  • @LishaFathima 您刚刚更改了导入语句吗?如果是这样,您能否在您的问题代码中反映它..我对此有疑问..所以我们将尝试深入了解。
  • 感谢@LishaFathima,同时我正在查看您的 servlet 代码,我发现您也在使用 java.sql.Date 设置值,请也从那里更改它......并让我们知道结果。
  • 是的,因为类型不匹配。你必须(应该)使用java.util.Date的每一个地方,我们唯一能做的就是我们需要你的servlet代码、模型代码和错误的完整堆栈跟踪。
  • 它一直显示在文件中重命名..不知道为什么..如果我也这样做了,红线仍然存在。它还说 - Date 类型的方法 valueOf(String) 未定义
【解决方案3】:

我认为您在解析日期时遇到问题。 java.util.Datejava.sql.Date 是不同的。数据库只接受 java.sql.Date。 为此,您需要将 java.util.Date 转换为 java.sql.Date。

Date startDate = new SimpleDateFormat("yyyy-MM-dd").parse(request.getParameter("startDate"));

java.sql.Date sql_StartDate = new java.sql.Date(startDate.getTime() );

对其进行转换并设置值,最后将值插入到数据库中。

【讨论】:

  • 这意味着我还需要更改我的导入?
  • @LishaFathima 是的。
猜你喜欢
  • 2020-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-07
  • 2014-12-26
  • 1970-01-01
相关资源
最近更新 更多