防止在java中两次显示Arraylist值

Posted

技术标签:

【中文标题】防止在java中两次显示Arraylist值【英文标题】:Prevent display of Arraylist values twice in java 【发布时间】:2015-04-16 15:17:06 【问题描述】:

我有一个返回数组列表的方法。但是 Arraylsit 两次显示其值。 代码是-

ArrayList<Double> ref_jsp=new ArrayList<Double>();

public  ArrayList<Double> refernece(String name) throws SQLException, ParseException 

    String first=name.substring(1,19);
    String last =name.substring(24,42);
   List<Double> slist = new ArrayList<Double>(map1.keySet());
  String s = StringUtils.join(slist, ',');
  System.out.println("comma separated string"+s);

       try
              
              con = getConnection();
              stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);

             String vs2="SQL Query"
             stmt.executeQuery(vs2);
             rs1 = stmt.getResultSet();

             while(rs1.next()) 
                
                   ref_jsp.add((rs1.getDouble(1)));
                   ref_jsp.add((rs1.getDouble(2)));
                   ref_jsp.add((rs1.getDouble(3)));
                   ref_jsp.add((rs1.getDouble(4)));
                   ref_jsp.add((rs1.getDouble(5)));
                   ref_jsp.add((rs1.getDouble(6)));
                   ref_jsp.add(rs1.getDouble(7));
                   ref_jsp.add(rs1.getDouble(8));
                   ref_jsp.add(rs1.getDouble(9));
                   ref_jsp.add(rs1.getDouble(10));
                   ref_jsp.add((rs1.getDouble(11)));

              
         
        catch( Exception e )
                
                    System.out.println("\nException in reference "+e);
                
        return ref_jsp;
    

我的Sql查询没问题。我检查了。ref_jsp返回的值显示了两次。请解释我哪里出错了??我的jsp代码敌人显示列表值是-

<%
 String ref_name= request.getParameter("ref_logtime");
 pageContext.setAttribute("ref_name", ref_name);
 ref.FindClosestToMultiplesOfTen(ref_name);
 ref.refernece(ref_name);
%>
<table width = "300px" border = "1" cellspacing="2">

 <tr><c:forEach var="r" items="$ref.refernece(param.ref_logtime)"> 
 <td><c:out value="$r"></c:out></td>
 </c:forEach></tr>
 </table>

我的输出格式为-

 value-1 value-2 value-3 value-4 value-1 value-2 value-3 value-4

【问题讨论】:

你能告诉我们你的输出屏幕吗? 我真的不明白 scriplets 在你的 jsp 中的作用是什么? 实际上,我有另一个显示日历的 jsp 页面。用户从日历中选择日期,该日期进入 sql 查询。所以我使用 scriplet 将选定日期从该 jsp 传递到java类和所需的方法。 @SanKrish 我无法显示我的输出图像,因为我的声誉低于 10。但请查看我上面的编辑。我试图给出我的输出视图。 你确定,调用方法引用,传递参数 ref_logtime 返回的 ArrayList 只包含 1,2,3,4 个值吗? 【参考方案1】:

看起来问题是因为您的 java 类中的以下行。

ArrayList<Double> ref_jsp = new ArrayList<Double>();

您已将ref_jsp 声明为类级变量,将其移到方法public ArrayList&lt;Double&gt; refernece(String name) 中。

发生这种情况是因为您从 jsp 调用了两次 referenece 方法。

<%
 String ref_name= request.getParameter("ref_logtime");
 pageContext.setAttribute("ref_name", ref_name);
 ref.FindClosestToMultiplesOfTen(ref_name);
 ref.refernece(ref_name); //******* 1st call *********
%>
<table width = "300px" border = "1" cellspacing="2">

 <tr><c:forEach var="r" items="$ref.refernece(param.ref_logtime)">//***2nd call*** 
 <td><c:out value="$r"></c:out></td>
 </c:forEach></tr>
 </table>

在第一次调用期间,假设您有 10 个项目,这些项目被添加到您的 arraylist 中,并且由于该 arraylist 是实例级变量,在第二次调用期间,您再次获得 10 个项目,并且与现有的 10 个项目一起添加,因此您有重复的项目。

【讨论】:

好的。但是我不能放 ArrayList ref_jsp = new ArrayList();在我的方法中,因为 ref_jsp 在其他方法中使用。由于引用(字符串名称)有参数,我不知道如何在另一个方法中调用此方法,以便我可以在引用(字符串名称)方法中声明 ref_jsp。跨度> 在你的方法中声明一个新的ref_jsp1,向它添加结果集值并将这个ref_jsp1返回给calee。 @tiddirastogi 或者作为快速修复在 refernece 方法的第一行添加 ref_jsp.clear()【参考方案2】:

@Zeeshan 正确指出了错误。如果您不想将 arraylist 作为函数的本地成员返回,并且正如您提到的 ref_jsp 也在另一个方法中使用,请确保在所有关联方法完成操作后清除 arraylist 的元素那个清单。为此使用 ref_jsp.clear()。

【讨论】:

以上是关于防止在java中两次显示Arraylist值的主要内容,如果未能解决你的问题,请参考以下文章

VS Code 向我显示“加载工作区时出错:在工作区中两次找到模块“main.go””

防止某些对象被添加到 ArrayList

如何在同一列或不同列的一个sql语句中两次使用'BETWEEN'条件

如何防止Java自动舍入

如何在 C# 中两次读取 Http 响应流?

如何在一个 submitHandler 中两次更新反应状态