日期:2014-05-17  浏览次数:20974 次

<c:forEach>迭代标签无法从数据库读出数据
小弟是初学者,编写了一个投票小程序,但是无法从数据库里读出数据,运行也不报错,页面代码如下:
<c:set var="options" value="${requestScope.optionlist}"/>  
  <c:if test="${empty options}">
  <tr><td colspan="2">无投票选项</td></tr>
  </c:if>  
  <c:if test="${!empty options}">
  <c:forEach var="option" varStatus="ovs" items="${options}">
  <tr>
  <td style="padding-left:20">${option.optionName}</td>
  <td align="center"><input type="radio" name="movie" value="${option.id}" onclick="message.innerHTML=''"></td>
  </tr>
  <tr><td colspan="2"></td></tr>
  </c:forEach>

/shiyan/src/com/servlet/IndexServlet.java为:
List<OptionBean> options=new OptionDao().getOptions();
  request.setAttribute("optionlist",options);
  RequestDispatcher rd=request.getRequestDispatcher("/index.jsp");
  rd.forward(request,response);

xml配置为:
<servlet>
<servlet-name>index</servlet-name>
<servlet-class>com.servlet.IndexServlet</servlet-class>
</servlet>  
<servlet-mapping>
<servlet-name>index</servlet-name>
<url-pattern>/index</url-pattern>
</servlet-mapping>

操作数据库的代码:
public OptionDao(){
mydb=new DB();
}
public List<OptionBean> getOptions(){
String sql="select * from tb_option order by option_order";
List<OptionBean> options=getList1(sql,null);
return options;
}
private List<OptionBean> getList1(String sql,Object[] params){
List<OptionBean> options=null;
DB mydb=new DB();
mydb.doPstm(sql,params);
try {
ResultSet rs = mydb.getRs();
if(rs!=null){
options=new ArrayList<OptionBean>();
while(rs.next()){
OptionBean single=new OptionBean();
single.setId(rs.getInt(1));
single.setOptionName(rs.getString(2));
single.setOptionBallot(rs.getInt(3));
single.setOptionOrder(rs.getInt(4));
options.add(single);
}
rs.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
return options;
}

然后连接数据库的代码均没有问题,请问问题出在哪里?

------解决方案--------------------
select * from tb_option order by option_order
上面是*号,下面取的时候就rs.getInt("id");
一定要用rs.getInt(数字)的话把*号写成各个字段
------解决方案--------------------
调试一下,是问题总会解决的。
可以用变量接受你想要的值,然后打印出来,看看是不是你想要的……
------解决方案--------------------
<c:set var="options" value="${requestScope.optionlist}"/>
<c:if test="${empty options}">
<tr><td colspan="2">无投票选项</td></tr>
</c:if>

${option.optionName}
你声明有变量是options,但你在下面引用时是用的option,所以没有数据!
------解决方案--------------------
首先,<c:set var="options" value="${requestScope.optionlist}"/> 没意义

你下面用的options都可以直接用${requestScope.optionlist}。试试