这是我的jsp页面,它使用for循环
从数据库中检索项目列表<%
itemManager mgr = new itemManager();
Item[] items = mgr.getAllItems();
for(int i = 0; i < items.length; i++){
%>
<tr>
<td> <img border="0" src="<%=items[i].getItemImage() %>" width="100" height="100">
</td>
<td>
<%=items[i].getItemName()%>
<input type="text" name="itemID" value="<%=items[i].getItemID()%>">
<br/>
<%=items[i].getItemDesc()%>
<br/>
Start Bid : <%=items[i].getStartBid()%>
<br/>
Buy it now : <%=items[i].getEndBid()%>
<br/>
Bidding close on : <%=items[i].getDuration()%>
<br/>
<input type="submit" value="View">
<%
}
%></table>
这是链接到您之前选择的项目的jsp页面
<table border="1" align="center">
<%
itemManager mgr = new itemManager();
Item items = mgr.getItem((Integer)session.getAttribute("ITEM_DATA"));
%>
<tr>
<td> <b> <%=items.getItemName() %></b> </td>
</tr>
</table>
这是用于存储所选项目ID的会话并转发到正确项目jsp页面的servlet。
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession(true);
int id = Integer.parseInt(request.getParameter("itemID"));
session.setAttribute("ITEM_DATA",id);
RequestDispatcher rd = request.getRequestDispatcher("viewItem.jsp");
rd.forward(request, response);
}
然而,在我点击视图按钮后。它保持链接到itemID = 1。
网址显示"/ItemServlet?itemID=1&itemID=2"
。
事实上,如果我点击itemID = 2,网址应显示如下:
"/ItemServlet?itemID=2"
结果,我怎样才能做到这一点?提前谢谢!
答案 0 :(得分:0)
动态更改文本字段的名称。
并在servlet中使用getQueryString()来查找itemId名称和值。
使用EL。
希望这会对你有帮助
答案 1 :(得分:0)
代码中的问题是您使用单个form
并在表单内动态创建输入框。所以所有输入框都具有相同的名称。这就是为什么当您提交表单时,所有输入框值都作为请求参数发送。我只是减少了代码中的一些部分以获得更好的信誉。以此为代码
<form action="item" method="get">
<table>
<%
ItemManager mgr = new ItemManager();
Item[] items = mgr.getAllItems();
for(int i = 0; i < items.length; i++){
%>
<tr>
<td>
<%=items[i].getItemName()%>
<input type="text" name="itemID" value="<%=items[i].getItemId()%>">
<input type="submit" value="View"> </td></tr>
<%
}
%></table>
</form>
当您运行此代码并且检查呈现的HTML
代码时,它将显示为
<form action="item" method="get">
<table>
<tr><td>
aaa
<input type="text" name="itemID" value="1">
<input type="submit" value="View"> </td></tr>
<tr>
<td>
bbb
<input type="text" name="itemID" value="2">
<input type="submit" value="View"> </td></tr>
<tr><td>
ccc
<input type="text" name="itemID" value="3">
<input type="submit" value="View"> </td></tr>
</table>
</form>
此处所有输入框的名称与“itemID”相同。作为一种解决方案,您可以在for循环内创建表单,这样在提交时只会输入一个输入框值作为请求。
在form
内部代码中创建for loop
。
<table>
<%
ItemManager mgr = new ItemManager();
Item[] items = mgr.getAllItems();
for(int i = 0; i < items.length; i++){
%>
<form action="item" method="get">
<tr>
<td>
<%=items[i].getItemName()%>
<input type="text" name="itemID" value="<%=items[i].getItemId()%>">
<input type="submit" value="View"> </td></tr>
</form>
<%
}
%></table>
希望这会对你有所帮助。