0

初心者はこちら。だからここにあなたがストーカーするための私のコードのサンプルがあります:

/// if addToCart action is called
if (userPath.equals("/addToCart")) {
    // if user is adding item to cart for first time
    // create cart object and attach it to user session
    if (cart == null) {
        cart = new ShoppingCart();
        session.setAttribute("cart", cart);
    }

    // get user input from request
    String productId = request.getParameter("productId");

    if (!productId.isEmpty()) {
        Product product = productFacade.find(Integer.parseInt(productId));
        cart.addItem(product);
    }
    userPath = "/category";
// if updateCart action is called
} else if (userPath.equals("/updateCart")) {
    // get input from request
    String productId = request.getParameter("productId");
    String quantity = request.getParameter("quantity");

    Product product = productFacade.find(Integer.parseInt(productId));
    cart.update(product, quantity);

    userPath = "/cart";
}

IDE は最初の値を無視し、代わり"/category"に割り当て"/cart"ます。この問題により、アプリケーションが異常な動作をします。たとえば、ユーザーがブラウザーで [カートに追加] をクリックすると、カテゴリ ページに留まる代わりに、カートに直接移動します...

未使用の値を使用する必要がある

... どうすれば修正できますか? 私はいくつかのことを試しましたが、これまでのところ成功していません...それは確かに非常に奇妙です...この問題に初めて遭遇しました...

編集

いくつかの進歩... 昨日、まだ解決されていない問題を解決するために丸一日を費やしました...

報告が必要なバグでしょうか?

これまでに試した修正:

  • 未使用の値を削除しました...そしてそれらを再入力しましたが、明らかに何もしませんでした...
  • ブラケットで遊んでみまし{}た(試してみる価値があります)...
  • コードを少し変更し、クラスの先頭で次のように値を呼び出しました。

    @WebServlet(name = "Controller",
                loadOnStartup = 1,
                urlPatterns = {"/category",
                               "/addToCart",
    

    等..

ステートメントがどこかで閉じられていないことに関係があると思いますか?割り当てられるのは、前のものを無視する最後のステートメントであるため...

リクエストに応じて2回目の編集

@Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {

        String userPath = request.getServletPath();
        HttpSession session = request.getSession();
        ShoppingCart cart = (ShoppingCart) session.getAttribute("cart");
        Wishlist wishlist = (Wishlist) session.getAttribute("wishlist");

        /// if addToCart action is called
        if (userPath.equals("/addToCart")) {

            // if user is adding item to cart for first time
            // create cart object and attach it to user session
            if (cart == null) {

                cart = new ShoppingCart();
                session.setAttribute("cart", cart);
            }

            // get user input from request
            String productId = request.getParameter("productId");


            if (!productId.isEmpty()) {

                Product product = productFacade.find(Integer.parseInt(productId));
                cart.addItem(product);
            }

            userPath = "/category"; => UNUSED VALUE


       // if updateCart action is called
        } else if (userPath.equals("/updateCart")) {

            // get input from request
            String productId = request.getParameter("productId");
            String quantity = request.getParameter("quantity");

            Product product = productFacade.find(Integer.parseInt(productId));
            cart.update(product, quantity);

            userPath = "/cart"; => UNUSED VALUE

            // if addToWishlist action is called
        } else if (userPath.equals("/addToWishlist")) {

            // if user is adding item to wishlist for first time
            // create wishlist object and attach it to user session
            if (wishlist == null) {

                wishlist = new Wishlist();
                session.setAttribute("wishlist", wishlist);
            }

            // get user input from request
            String productId = request.getParameter("productId");


            if (!productId.isEmpty()) {

                Product product = productFacade.find(Integer.parseInt(productId));
                wishlist.addItem(product);
            }

            userPath = "/category"; => UNUSED VALUE

            // if updateWishlist action is called
        } else if (userPath.equals("/updateWishlist")) {

            // get input from request
            String productId = request.getParameter("productId");
            String quantity = request.getParameter("quantity");

            Product product = productFacade.find(Integer.parseInt(productId));
            wishlist.update(product, quantity);

            userPath = "/wishlist"; => UNUSED VALUE


        // if purchase action is called
        } else if (userPath.equals("/purchase")) {

        // extract user data from request
       String first_name = request.getParameter("first_name");
       String last_name = request.getParameter("last_name");
       String phone = request.getParameter("phone");
       String email = request.getParameter("email");
       String address_1 = request.getParameter("address_1");
       String address_2 = request.getParameter("address_2");
       String city = request.getParameter("city");
       String State_Province_Region = request.getParameter("State_Province_Region");
       String Postal_Zip_Code = request.getParameter("Postal_Zip_Code");
       String country = request.getParameter("Country");
            int orderId = 0;


        // save order to database

       // get order details
       Map orderMap = orderManager.getOrderDetails(orderId);

        // place order details in request scope
       request.setAttribute("customer", orderMap.get("customer"));
       request.setAttribute("products", orderMap.get("products"));
       request.setAttribute("orderRecord", orderMap.get("orderRecord"));
       request.setAttribute("orderedProducts", orderMap.get("orderedProducts"));

        }

        userPath = "/confirmation"; => USED VALUE FOR ALL OTHER ACTIONS BEFORE.

言い換えれば、IDE は最後のuserPath/confirmation をそれuserPath以前の他のすべてに使用します。したがって、 、 、 、 をクリックして /addToCartも、/updateCart割り当て/addToWishlistられ/updateWishlistた userPath は最後の userPath/confirmationであり、すべてが確認ページにリダイレクトされることを意味し、このようになることは想定されていません。他のすべての userPath は無視され、次のunused valueように設定されています ... この問題を修正する方法がわかりません。

4

1 に答える 1