更新会话后< select>标记中的值重复

pexxcrt2  于 2021-07-13  发布在  Java
关注(0)|答案(3)|浏览(479)

传播我的jstl标签的一段代码 <forEach> 在jsp页面上:

  1. <select>
  2. <c:if test="${!empty codeofcountries}">
  3. <c:forEach var="codecoun" items="${codeofcountries}">
  4. <option value="${codecoun.kods}">${codecoun}</option>
  5. </c:forEach>
  6. </c:if>
  7. </select>

我的控制器:

  1. public void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException {
  2. response.setContentType(request.getResponseContentType());
  3. PPUZ_NDI_MNS_ENEEPortletSessionBean sessionBean = getSessionBean(request);
  4. if( sessionBean==null ) {
  5. response.getWriter().println("<b>NO PORTLET SESSION YET</b>");
  6. return;
  7. }
  8. sessionBean.setDefaultInfoText();
  9. String jsp = Start_JSP;
  10. switch (sessionBean.getMode()) {
  11. case Start:
  12. jsp = Start_JSP;
  13. break;
  14. case Main:
  15. jsp = Main_JSP;
  16. break;
  17. case Creat:
  18. case Edit:
  19. case Copy:
  20. jsp = CreatEdit_JSP;
  21. }
  22. request.setAttribute("codeofcountries", sessionBean.getKodNameList());
  23. PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(getJspFilePath(request, jsp));
  24. rd.include(request, response);

当我转到portlet all handled well时,列表是从数组生成的,并显示在标记中 <select> 如我所需。但是当我在门户上重新运行会话时,标签(select)的值在jsp页面上被复制。不要将上一个值保留在tag(select)中,并再次向其添加相同的列表。

v9tzhpje

v9tzhpje1#

从代码来看,这些值似乎被添加到 sessionBean.getKodNameList() ,导致值重复。
为了防止这种情况,我建议调试代码并检查从何处添加值。但是,对于快速修复,可以使用unmodifiablelist或set(with) equals 以及 hashCode 在课程的各个类中实现的方法) KodNameList .

tuwxkamq

tuwxkamq2#

codeofcountries中的变量是获取所有getkodnamelist()变量,然后迭代所有这些变量并将其放入选择选项中。
因此,请确保只将要访问的内容放入setattribute变量

  1. request.setAttribute("codeofcountries", sessionBean.getKodNameList());

另外,我认为您希望显示与值相同的内容,而不是整个数组,如下所示

  1. <c:forEach var="codecoun" items="${codeofcountries}">
  2. <option value="${codecoun.kods}">${codecoun.kods}</option>
  3. </c:forEach>
ibrsph3r

ibrsph3r3#

我在我列出的类中找到了解决问题的答案,结果发现方法和类是静态的。事实上,有几种方法可以解决这个问题,我选择了这一种。感谢您的关注!

相关问题