最近写一个项目时发现了一个让我疑惑的问题:
下面是查询订餐记录的一个方法,方法返回的是一个list集合对象;
//订餐记录查询
public List<Record> selectRecord(){
List<Record> list=new ArrayList<>();
try {
con=JDBCUtils.getConnection();
String sql="select * from order_record order by id desc";
ps=con.prepareStatement(sql);
rs= ps.executeQuery();
while (rs.next()){
Record record=new Record();
record.setId(rs.getInt("id"));
record.setOrganizename(rs.getString("organizename"));
record.setOrganizenumber(rs.getInt("organizenumber"));
record.setOrdernumber(rs.getInt("ordernumber"));
record.setRecordtime(rs.getString("recordtime"));
list.add(record);
}
}catch (Exception e){
e.printStackTrace();
}finally {
JDBCUtils.closeResource(rs,ps,con);
}
return list;
}
然后在servlet中设置了域对象,对象也是list集合对象;
@WebServlet("/historyServlet")
public class HistoryServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ImageService service=new ImageService();
List<Record> list=service.selectRecord();
request.setAttribute("recordlist",list);
request.getRequestDispatcher("menu/history.jsp").forward(request,response);
}
}
在jsp中用el表达式遍历list集合对象,运行没有问题;
<c:forEach items="${recordlist}" var="rl">
<tr>
<td>${rl.id}</td>
<td>${rl.organizename}</td>
<td>${rl.organizenumber}</td>
<td>${rl.ordernumber}</td>
<td>${rl.recordtime}</td>
但是下面就出问题了,下面我写了一个方法是根据id查询订餐记录,返回的也是一个list集合对象;
//根据id查询订餐记录
public List<Record> selectById(int id){
List<Record> list=new ArrayList<>();
try {
con=JDBCUtils.getConnection();
String sql="select * from order_record where id=?";
ps=con.prepareStatement(sql);
ps.setInt(1,id);
rs= ps.executeQuery();
while (rs.next()){
Record record=new Record();
record.setId(rs.getInt("id"));
record.setOrganizename(rs.getString("organizename"));
record.setOrganizenumber(rs.getInt("organizenumber"));
record.setOrdernumber(rs.getInt("ordernumber"));
record.setRecordtime(rs.getString("recordtime"));
list.add(record);
}
}catch (Exception e){
e.printStackTrace();
}finally {
JDBCUtils.closeResource(rs,ps,con);
}
return list;
}
servlet也是这样写的,域对象也是一个list集合对象;
@WebServlet("/idServlet")
public class IdServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ImageService service=new ImageService();
int id=Integer.parseInt(request.getParameter("id"));
System.out.println(id);
service.selectById(id);
List<Record> list=service.selectById(id);
System.out.println(list);
request.setAttribute("record",list);
request.getRequestDispatcher("menu/update_record.jsp").forward(request,response);
}
}
jsp我是这样写的;
<form action="<c:url value="/updateServlet"/>" method="post">
订单编号:<input type="text" name="id" value="${record[0].id}" readonly><br/>
班组名称:<input type="text" name="organizename" value="${record[0].organizename}"><br/>
班组人数:<input type="text" name="organizenumber" value="${record[0].organizenumber}"><br/>
订餐数量:<input type="text" name="ordernumber" value="${record[0].ordernumber}"><br/>
<input type="submit" value="修改" >
所以我的问题就是为什么这里写的el表达式要加上下标才不报错,我不加下标的话它会报错: java.lang.NumberFormatException:For input string :"id" 明明第一个写的时候el表达式不用加下标,也都是list集合对象,为什么会有区别?有知道的大佬可以解答一下吗?
第一个:
<c:forEach items="${recordlist}" var="rl">
<tr>
<td>${rl.id}</td>
<td>${rl.organizename}</td>
<td>${rl.organizenumber}</td>
<td>${rl.ordernumber}</td>
<td>${rl.recordtime}</td>
第二个:
<form action="<c:url value="/updateServlet"/>" method="post">
订单编号:<input type="text" name="id" value="${record[0].id}" readonly><br/>
班组名称:<input type="text" name="organizename" value="${record[0].organizename}"><br/>
班组人数:<input type="text" name="organizenumber" value="${record[0].organizenumber}"><br/>
订餐数量:<input type="text" name="ordernumber" value="${record[0].ordernumber}"><br/>
<input type="submit" value="修改" >