0

私はオンライン ショップに似た小さな JEE5 アプリケーションを実行しており、ショップの商品を表示する必要があります。コードでより明確に確認できます。

<c:forEach var="product" items="${productsBean.products}">
  <div class ="product">
   <table>
    <td>
     <c:out value="${product.id}"/>
    </td>
    <td>
     <c:out value="${product.name}"/>
    </td>
    <td>
     <c:out value="${product.price}"/>
    </td>
    <td>
     <c:out value="${product.description}"/> 
    </td>
    <td>
    <form method="post" action="/servlets-war/AddToCart">
     <input type="hidden" name="id" value="${product.id}"></input>
     <input type="submit" value="add to cart"/>    
    </form>
   </td>
  </table>
 </div>
</c:forEach>

問題は、フォームが送信されたときに、フォームの非表示の入力値が ${product.id} ではなく null を返すことです。

関連するサーブレット コードは次のとおりです。

protected void processRequest(HttpServletRequest request,
        HttpServletResponse response)
        throws ServletException, IOException {

    ShoppingCart shoppingCart = (ShoppingCart)request.getSession()
            .getAttribute("shoppingCart");

    if(shoppingCart == null){
    shoppingCart = new ShoppingCart();
    }

    ProductsBean store =(ProductsBean) request
            .getSession().getAttribute("productsBean");

    int id = Integer.parseInt((String)request.getAttribute("id"));

    Product temp = store.getProduct(id);

    shoppingCart.getProducts().add(temp);

    request.getSession().setAttribute("shoppingCart", shoppingCart);

    this.getServletContext().getRequestDispatcher("/shop.jsp")
            .forward(request, response);
}
4

1 に答える 1

0

idをリクエスト属性として取得しています。

int id = Integer.parseInt((String)request.getAttribute("id"));

フォーム入力は、リクエスト パラメータとしてサーブレットに送信されます。コードを適切に変更します。

int id = Integer.parseInt((String)request.getParameter("id"));
于 2013-06-16T02:11:41.143 に答える