org.apache.jasper.JasperException:无法为JSP编译类:

时间:2011-10-07 16:50:53

标签: java jsp tomcat

  

可能重复:
  How to upload files in JSP/Servlet?

我正在使用tomcat 6.0 我有以下jsp代码

 <%@ page import="java.util.*" %>
 <!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">
 <html>
 <head>
 </head> 
 <body> 
 <table>
 <tr>
 <td>Name</td>
 <td>Start Date</td>
 </tr>
 <%
 List<data> da1 = conb.dat();
 while(da1 != null) {
 %>
<tr>
<td><%out.print(da1.get1());%></td>
<td><%out.print(da1.get2());%></td>
</tr>
<%
}
%>
</table>            
</body> 
</html>

我收到此错误

 org.apache.jasper.JasperException: Unable to compile class for JSP: 

 An error occurred at line: 68 in the jsp file: /trands.jsp
 The method get1() is undefined for the type List<data>
 65: <%
 66: data da = new pkg.data();
 67: List<data> da1 = conb.dat();
 68: while(da1 != null) {
 69: %>
 70:     <tr>
 71:     <td><%out.print(da1.get1());%></td>


 An error occurred at line: 69 in the jsp file: /trands.jsp
 The method get2() is undefined for the type List<data>
 66: data da = new data();
 67: List<data> da1 = conb.dat();
 68: while(da1 != null) {
 69: %>
 70:     <tr>
 71:     <td><%out.print(da1.get1());%></td>
 72:     <td><%out.print(da1.get2());%></td>


 Stacktrace:
org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:        92)
org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330)
org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:439)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:356)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:334)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:321)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:592)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:328)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

java文件位于WEB-INF / classes / pkg文件夹中 为什么我得到这个错误。以及为什么它显示get1()未定义。我在data.java中有get1()函数。 connectdb()是jdbc java文件)。我编译了所有java类来获取.class文件。并将这个while循环显示我的数据库的所有细节
CODE for data.java

 package pkg;

 public class data
 {  
public String propn;
public String startd;
 public data()
{
}
public void set1(String a)
{
propn=a;
}
public String get1()
{
return propn;
}
public void set2(String b)
{
startd=b;
}
public String get2()
{
return startd;
}
}

2 个答案:

答案 0 :(得分:4)

The List interface没有get1()get2()方法。它只有a get() method。也许你打算用它代替:

<td><%out.print(da1.get(1));%></td>
<td><%out.print(da1.get(2));%></td>

请注意,列表索引以0开头,而不是1。也许你也想改变它。

另见:


无关具体问题,我不知道你要做什么,但我只会提到这段代码是一场灾难,并暴露出更多其他问题(开始,做了什么)你认为用while (da1 != null)来实现吗?你想在无限循环中展示它们吗?)。我强烈建议忘记这一点的JSP并将所有工作转移到普通的Java类,然后使用main()方法将其作为普通的Java应用程序进行测试,该方法按System.out.println()打印结果。这更容易开发,播放和测试。一旦你完成所有工作,你就可以导入并在servlet中调用该类,最终让JSP显示结果。


<强>更新

以下是您通常希望循环显示列表的方法(我已根据最佳naming conventions为您修复了可怕的guesses,以便代码更自我记录):

List<Work> works = workService.list();

for (Work work : works) {
    System.out.println(work.getPropertyNumber());
    System.out.println(work.getStartDate());
}

以下是你将normally在JSP中循环它的方式

<c:forEach items="${works}" var="work">
    <td>${work.propertyNumber}</td>
    <td>${work.startDate}</td>
</c:forEach>

答案 1 :(得分:0)

da1变量的类型为List。它不包含方法get1()和get2()。你可能想要的是da1.get(1),da1.get(2)等。

<%out.print(da1.get(1));%>
<%out.print(da1.get(2));%>