jstl迭代错误

时间:2012-01-28 16:11:15

标签: java jstl

我想将值绑定到dropdownlist,从数据库中检索该值。

我希望结果如下:

    <option value=Sick>Sick</option>                      
    <option value=Funeral>Funeral</option>                  
    <option value=Trip>Trip</option>                    
    <option value=Others>Others</option>             

但现在我得到的结果如下:

  <option value=Others>Others</option>
  <option value=Others>Others</option>
  <option value=Others>Others</option>
  <option value=Others>Others</option>

这是我的java代码:

while(rs.next()){
    le.setReason(rs.getString("lr_name"));
    arrLeave.add(le);
}
request.setAttribute("arrLeave", arrLeave);

这是我的JSP:

<c:forEach items="${arrLeave}" var="arrLeave">
<option value=${arrLeave.reason}>${arrLeave.reason}</option>
</c:forEach>

有什么问题?谢谢 !

2 个答案:

答案 0 :(得分:0)

您只有一个le类实例,因此无论上一个原因是什么,都会获得 n 副本。

为结果集中的每一行创建一个新实例:

while (rs.next()) {
    arrLeave.add(new Leave(rs.getString("lr_name")));
}

答案 1 :(得分:0)

您正在更新同一个对象并将其添加到列表中。

le.setReason(rs.getString("lr_name")) -> same object updated over all iteration

在设置原因之前使用new运算符初始化le ..

<BeanName> le = new <BeanName>();
le.setReason(rs.getString("lr_name"));