【发布时间】:2014-08-08 07:43:34
【问题描述】:
我有一个数据库表users 包含列id(int),name(string),department(string),password(string)。我将表内容存储在servlet (display.java) 的arrayList 对象中,然后将其转发到jsp 页面(home1.jsp)。但是我无法使用该 jsp 页面显示所有表格。未显示 ID 内容,并且表格的列已向右移动 1 个单位。即不在正确的标题下。
@WebServlet("/Display3")
public class Display3 extends HttpServlet {
private static final long serialVersionUID = 1L;
public Display3() {
super();
// TODO Auto-generated constructor stub
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
Connection conn = null;
Statement st;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection
("jdbc:mysql://localhost:3306/test?user=root&password=Tpg@1234");
ArrayList al=null;
ArrayList userList =new ArrayList();
String query = "select id,name,department,password from users";
st = conn.createStatement();
ResultSet rs = st.executeQuery(query);
while(rs.next())
{
al = new ArrayList();
al.add(rs.getInt(1));
al.add(rs.getString(2));
al.add(rs.getString(3));
al.add(rs.getString(4));
userList.add(al);
}
request.setAttribute("userList",userList);
RequestDispatcher dispatcher = getServletContext()
.getRequestDispatcher("/home1.jsp");
dispatcher.forward(request,response);
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
jsp代码在这里
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"pageEncoding="ISO-8859-1"%>
<%@ page import="java.util.*;" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
<script language ="javascript">
function editData(id){
}
function deleteData(id){
}
</script>
</head>
<body>
<br>
<table align="center">
</table>
<br>
<table border='1' width='300' cellpadding='1' cellspacing='0'>
<tr>
<td colspan=6 align="center"></td>
</tr>
<tr>
<td>Id</td>
<td>Name</td><td>Department</td>
<td>Edit</td>
<td>Delete</td>
</tr>
<%
List Li = new ArrayList();
Iterator lr;
if(request.getAttribute("userList")!=null && request.getAttribute("userList")!="")
{
List userList = (ArrayList)request.getAttribute("userList");
Iterator itr = userList.iterator();
while(itr.hasNext())
{
Li = (ArrayList)itr.next();
lr = Li.iterator();
Integer id = (Integer)lr.next();
%>
<tr>
<%
while(lr.hasNext())
{
%>
<td><%=lr.next()%></td>
<%
}
%>
<td><input type="button" name="edit" value="edit" onclick="editData(<%=id%>);" ></td>
<td><input type="button" name="delete" value="Delete" onclick="deleteData(<%=id%>);"></td>
</tr>
<%
}
}
%>
}
</table>
</body>
</html>
【问题讨论】:
-
userList 是一个 ArrayList,所以这是有效的
request.getAttribute("userList")!=""吗? -
另外,为什么不使用现有的框架,如 struts、Spring MVC 的条纹?这段代码是 JSP 如此上个世纪
-
请不要再使用 scriptlet
-
我是java新手。我不知道 struts 和 Springs。
-
不要在一个while循环中为同一个ArrayList写两次
itr.next(),这可能是the columns of table has been shifted 1 unit right.的原因