防止在java中显示两次Arraylist值

时间:2015-02-16 06:46:01

标签: java jsp arraylist jstl

我有一个返回arraylist的方法。但是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

2 个答案:

答案 0 :(得分:2)

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

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

您已将ref_jsp声明为类级别变量,请将其移至方法public ArrayList<Double> 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个项目一起添加,因此你有重复的项目。

答案 1 :(得分:0)

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