<%@ page language="java" import="controller.*;,java.net.*,java.text.*,java.sql.*, java.util.ArrayList" %>
<html>
<body bgcolor="#ffffff">
<%
// Initialize the array of available products.
Connection conn=JavaConnect.ConnectDb();
PreparedStatement pst=conn.prepareStatement("SELECT * FROM products");
ResultSet rs = pst.executeQuery();
ArrayList<model.Item> catalog = new ArrayList();
while(rs.next()){
catalog.add (new model.Item(rs.getString(1), rs.getInt(2),rs.getString(3),rs.getString(4),rs.getInt(5),rs.getInt(6),rs.getInt(7)));
for (int i=0; i < catalog.size(); i++) {
model.Item item = catalog.get(i);
}
}
%>
<a href="/shoppingcart/ViewShoppingCart.jsp">View Shopping Cart</a>
<p>
<h1>Available Products</h1>
<table border="1">
<tr><th>EAN</th><th>PIP</th><th>Name</th><th>Description</th><th>Supplier ID</th><th>Price</th><th>Quantity</th></tr>
<%
// Get a currency formatter for showing the price.
NumberFormat currency = NumberFormat.getCurrencyInstance();
for (int i=0; i < catalog.size(); i++)
{
model.Item item = catalog.get(i);
// Create the URL for adding the item to the shopping cart.
String addItemURL =
"/shoppingcart/AddToShoppingCartServlet?"+
"productCode="+URLEncoder.encode(item.getEAN())+
"&description="+URLEncoder.encode(item.getDescription())+
"&quantity="+URLEncoder.encode(""+item.getQuantity())+
"&price="+URLEncoder.encode(""+item.getPrice());
%>
<tr><td><%=item.getDescription()%></td><td><%=item.getQuantity()%>
</td><td><%=item.getPrice()%></td>
<td><a href="<%=addItemURL%>">Add to Shopping Cart</a></td></tr>
<%
}
%>
</table>
</body>
</html>
org.apache.jasper.JasperException: Unable to compile class for JSP:
An error occurred at line: 14 in the generated java file
Syntax error on token ";", delete this token
Stacktrace:
org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:102)
org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:331)
org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:457)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:378)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:353)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:340)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:644)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:358)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
使用ArrayList后出现这个新错误。如何解决此问题以显示数据库中的产品。我已将新编辑包含在我的代码和堆栈跟踪中。我不明白它引用的第14行。
答案 0 :(得分:1)
您遇到的错误正在发生,因为您有两个Item类导入到您的jsp中。更改导入或将完整的类名放在jsp代码中:
controller.Item[] catalog = new controller.Item[100];
或
model.Item[] catalog = new model.Item[100];
答案 1 :(得分:1)
您需要对正在使用的类Item
进行完全限定,因为类路径中有两个具有相同名称的类。我的意思是,而不是
new Item(...)
写下这个:
new model.Item(...)
要明确的是,“完全限定”一个类意味着,编写所有以点分隔的包,这些包将导致使用特定的类。
答案 2 :(得分:1)
类Item
显示在您导入的两个包中。
import="model.*,controller.*
所以你必须指定正确的
model.Item[] catalog=new model.Item[100]; //or
controller.Item[] catalog=new controller.Item[100];
也可以使用集合
代替使用Array ArrayList<model.Item> itemList = new ArrayList();
然后为每一行添加
itemlist.add (new model.Item(rs.getString(1),
rs.getInt(2),rs.getString(3),rs.getString(4),rs.getInt(5),
rs.getInt(6),rs.getInt(7));
使用ArrayList
for (int i=0; i < itemList.size(); i++) {
model.Item item = itemList.get(i);
}
答案 3 :(得分:0)