0

这是我的 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>

这是 servlet 用于存储所选项目 id 的会话并转发到正确的项目 jsp 页面。

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。

URL 显示"/ItemServlet?itemID=1&itemID=2"

事实上,如果我点击 itemID=2,URL 应该显示如下:

"/ItemServlet?itemID=2"

结果,我怎样才能做到这一点?提前致谢!

4

2 回答 2

0

动态更改文本字段的名称。
并在 servlet 中使用 getQueryString() 来查找 itemId 名称和值。
通过使用 EL。
我希望这能帮到您

于 2013-12-30T13:30:39.280 回答
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 循环内创建表单,以便在提交时仅将一个输入框值作为请求发送。

formfor 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>  

希望这会帮助你。

于 2013-12-31T07:06:54.130 回答