【问题标题】:Duplicate values in the <select> tag after update session更新会话后 <select> 标记中的重复值
【发布时间】:2016-03-28 13:39:36
【问题描述】:

在jsp页面上传播我的jstl标签&lt;forEach&gt;的一段代码:

<select>    
    <c:if test="${!empty codeofcountries}">
      <c:forEach var="codecoun" items="${codeofcountries}">
            <option value="${codecoun.kods}">${codecoun}</option>
      </c:forEach>
  </c:if>
</select>

我的控制器:

public void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException {
        response.setContentType(request.getResponseContentType());
        PPUZ_NDI_MNS_ENEEPortletSessionBean sessionBean = getSessionBean(request);
        if( sessionBean==null ) {
            response.getWriter().println("<b>NO PORTLET SESSION YET</b>");
            return;
        }
        sessionBean.setDefaultInfoText();

        String jsp = Start_JSP;
        switch (sessionBean.getMode()) {
            case Start:
                jsp = Start_JSP;
                break;
            case Main:
                jsp = Main_JSP;
                break;
            case Creat:
            case Edit:
            case Copy:
                jsp = CreatEdit_JSP;
        }
        request.setAttribute("codeofcountries", sessionBean.getKodNameList());
        PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(getJspFilePath(request, jsp));
        rd.include(request, response);

当我去所有处理好的portlet时,列表是从数组中生成的,并根据我的需要显示在标签&lt;select&gt;中。但是当我在门户网站上重新运行会话时,标签(选择)的值在 jsp 页面上重复。不要将之前的值留在标记(选择)中并再次添加到相同的列表中。

【问题讨论】:

  • 我知道 if 会怎样?
  • 迭代器条件
  • sessionBean.getKodNameList() 的代码是什么?
  • 我通过SQL查询有两个变量,我在KodNameList中形成它们并通过键{codeofcountries}将它们传输到JSP中的标签

标签: java jsp session jstl


【解决方案1】:

从代码来看,这些值似乎被添加到sessionBean.getKodNameList() 引用的列表中,导致重复值。

为了防止这种情况,我建议调试代码并检查添加值的位置。但是,为了快速修复,您可以使用 unmodifiableList 或 Set(当然,在各自的课程中实现 equalshashCode 方法)KodNameList

【讨论】:

  • 我认为我的问题隐藏在我的控制器中,特别是 request.setAttribute("codeofcountries", sessionBean.getKodNameList());
【解决方案2】:

您在 codeofcountries 中的变量正在获取所有 getKodNameList() 变量,并且您对所有变量进行迭代并将其放入选择选项中。

因此,请确保您只将要访问的内容放入 setAttribute 变量中

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

另外我认为你想显示与值相同的东西,而不是下面的整个数组

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

【讨论】:

  • 我通过SQL查询有两个变量,我在KodNameList中形成它们并通过键{codeofcountries}将它们传输到JSP中的标签
  • 我不确定到底是什么问题。但我建议将 getKodNameList 设置为 List 变量,然后您可以从 jsp 访问它。在此处找到示例:stackoverflow.com/a/36161770/4307449
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-28
    • 2016-03-28
    • 1970-01-01
    • 2014-06-14
    • 1970-01-01
    • 2013-08-21
    • 1970-01-01
    相关资源
    最近更新 更多