【问题标题】:Link to the correct item page by selecting the list of items in for loop通过选择 for 循环中的项目列表链接到正确的项目页面
【发布时间】:2014-01-17 08:34:13
【问题描述】:

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

网址显示为 "/ItemServlet?itemID=1&amp;itemID=2"

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

"/ItemServlet?itemID=2"

因此,我该如何实现呢?提前致谢!

【问题讨论】:

    标签: java jsp navigateurl


    【解决方案1】:

    动态更改文本字段的名称。
    并在 servlet 中使用 getQueryString() 来查找 itemId 的名称和值。
    使用 EL。
    希望对您有所帮助

    【讨论】:

      【解决方案2】:

      您的代码中的问题是您使用单个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 循环内创建表单,以便在提交时仅将一个输入框值作为请求发送。

      在您的for loop 中创建form,如下面的代码。

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

      希望这会对您有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多