当前位置: 首页 > 知识库问答 >
问题:

Javaservlet请求仅适用于多个自动生成的html元素中的第一个

苏宏逸
2023-03-14

不幸的是,这是一个学校的项目,大多数变量都是用我的母语编写的,如果需要的话,我会翻译任何变量,但保留代码原样,以防出现问题。

我正在为餐饮服务制作一个web应用程序,后端使用Java servlet,前端使用JSP。

会话存储具有哈希映射的Order对象

<!-- Cart jsp snippet-->
                         <!--article             Order.getHashMap().keySet()-->
            <c:forEach var="stavka" items="${Narudzbina.getStavkeNarudzbine().keySet()}">
                <div class='korpa-stavka'>
                     <!-- article.getName() -->
                    <h5>${stavka.getNazivProizvoda()}</h5>
                    <input class="btn btn-light poeni-korpa" type="number" min="1" id="${stavka.getProizvodID()}" onchange="updateUrl(this)" value="${Narudzbina.getStavkeNarudzbine().get(stavka)}">
                    <div class="stavka-buttons">
                        <!-- Link is filled with a js script -->
                            <a href="" id="a${stavka.getProizvodID()}" class="btn btn-warning btn-stavka">Izmeni</a>
                            <!-- Link is static except for the ID, but no JS -->
                            <a href="Korpa?Zahtev=Izbrisi&Proizvod=${stavka.getProizvodID()}" class="btn btn-danger btn-stavka">Izbriši</a>
                    </div>
                </div>
                <p class='stavka-total'>Cena: ${stavka.getCenaPoPorciji() * Narudzbina.getStavkeNarudzbine().get(stavka)} RSD</p>
            </c:forEach>

这按预期工作。a标签href值之一填充了来自之前输入的数字的onchange调用。

// Js for updating href of that a tag
function updateUrl(element){
           var link = document.getElementById("a" + element.id);
           link.setAttribute("href", "Korpa?Zahtev=Izmeni&Proizvod="+ element.id +"&Kolicina=" + element.value);  
}

对于哈希表中自动生成的每一行,这也很有效。就我所见,点击其中任何一个上的按钮,正确调用“Korpa”控制器,具有良好的参数,不同且正确的ArticleID,每个都有不同且正确的数量。

然后,Korpa servlet将会话顺序对象打包为临时顺序,并在其上调用changeQuantity(article,newQuantity),完成后,在会话中打包更改的顺序并重新加载购物车页面。。

               // Order order = session order
               Narudzbina narudzbina = (Narudzbina)session.getAttribute("Narudzbina");
               //order.change quantity
               narudzbina.izmeniKolicinu(Integer.valueOf(request.getParameter("Proizvod")), Integer.valueOf(request.getParameter("Kolicina")));
               session.setAttribute("Narudzbina",narudzbina);
               //refreshes the Cart jsp 
               response.sendRedirect("Profil?User=" + session.getAttribute("User").toString() + "&View=Korpa");
               return;
               

顺序模型只是更改哈希映射中的值

             //changeQuantity     article ID      newQuantity
   public void izmeniKolicinu(int proizvodID, int novaKolicina) {
             //Order ord : hashMap.keySet()
        for (Proizvod prod : stavkeNarudzbine.keySet()) {
            //if ord.getArticleID == articleID
            if (prod.getProizvodID() == proizvodID) {
                stavkeNarudzbine.put(prod, novaKolicina);
            }
            break;
        }
    }

现在,所有这些对于更改数量和删除文章都非常有效(删除几乎是相同的,并且在控制器中有一个开关语句来检查要运行什么,我忽略了这一点,因为这已经是一个很长的帖子,而且很可能无关紧要)

但仅适用于在购物车jsp屏幕上绘制的第一篇文章。其他文章正确更新了各自的href,并且都正确调用servlet,页面刷新,没有抛出异常,并且请求的状态是302对于第一个(有效)和其余的。但值不会更新。

单击除第一个生成的链接之外的任何链接都不会更新值

此外,如果我在第一个实际有效的上单击删除,它会被删除,新的第一个绘制的现在可以工作了。很抱歉这个漫无边际的问题,我只是一个学生,在这个问题上真的迷路了,不太确定问题可能是什么,所以我提供了我认为会有帮助的所有信息...附言:在此过程中,任何地方都无法与数据库进行通信。

编辑:澄清问题

共有1个答案

百里业
2023-03-14

要在这里找到正确的答案(OP通过注释找到了它):中断需要在if-条件内

if (prod.getProizvodID() == proizvodID) {
    stavkeNarudzbine.put(prod, novaKolicina);
    break; // HERE
}
// NOT HERE: break;
 类似资料:
  • 问题内容: 我有3个具有相同ID的按钮,当他被点击时,我需要获取每个按钮的值。 这是我当前的脚本: 但这仅适用于第一个按钮,单击其他按钮将被忽略。 问题答案: 我有3个具有相同ID的按钮… 您的HTML无效,同一页面中的元素不能超过一个。 引用规格: 7.5.2 元素标识符:id和class属性 id =名称[CS] 此属性为元素分配名称。此名称在文档中必须唯一。 解决方案 :从更改为, 和 jQ

  • 本文向大家介绍如何指定样式仅适用于HTML中此元素的父元素和该元素的子元素?,包括了如何指定样式仅适用于HTML中此元素的父元素和该元素的子元素?的使用技巧和注意事项,需要的朋友参考一下 使用scoped 属性指定样式仅适用于父元素和元素的子元素- 示例

  • 问题内容: 如何只显示第一个角元素? 我正在这样使用: 但是由于我没有重复,所以我不必使用吗?我如何才能只显示第一个,而不必进行ng-repeat? 问题答案: 不要使用ng-repeat指令,这应该可以工作:

  • 我正试图用我的MERN stack web应用程序自动化构建过程。 目前,我使用CodePipeline,它: 从GitHub获取我的代码作为源代码 使用CodeBuild(Ubuntu 2.0)运行构建 并将其部署到我的Elastic BeanStalk环境中 步骤1 在尝试使用CodeBuild之后,即使客户端似乎完全按照日志进行构建,前端似乎也不会更新。 以下是我CodeBuild项目的一些

  • 当前,所有代码都在一个函数调用中: 我想使 可重用,因为我需要为文档中可导航到的每个链接呈现它,但我还在学习NextJS/JS/CSS等,所以我不明白需要如何构造它。 我尝试制作另一个js文件并创建另一个函数: 但我不能让它呈现出来。 如何才能做到这一点呢?

  • 我有HTML内容(实际上是一个WordPress插件的标签,像这样)- 如果我在匹配的URL上,我正在尝试将“active”类添加到link元素中。我的问题是,条件只对第一个元素起作用,但第二个元素没有得到类。这是我的jQuery- 更新 代码是正确的,但我的URL在结尾没有匹配的尾随斜杠。我通过添加斜杠(URL是自动生成的)修正了它- 谢谢大家:)