在我的Java EE项目中,我具有以下Servlet:
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import javax.naming.InitialContext;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;
/**
* Servlet implementation class TitlePopulatorServlet
*/
@WebServlet("/TitlePopulatorServlet")
public class TitlePopulatorServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public TitlePopulatorServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("Inside doGet()!");
ArrayList<BeanTitle> bt=new ArrayList<BeanTitle>();
java.io.PrintWriter out = response.getWriter();
response.setContentType("text/html");
Connection conn=null;
try {
/* get the DataSource from using the JNDI name */
Class.forName("com.mysql.jdbc.Driver");
InitialContext ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/Test");
//Create connection and then continue as usual other JDBC calls
conn=ds.getConnection();
System.out.println("\nConnection Successful in TitlePopulatorServlet !");
Statement s= conn.createStatement();
ResultSet rs=s.executeQuery("SELECT * FROM story");
while (rs.next() )
{
BeanTitle b = new BeanTitle();
b.setBtitle(rs.getString(1));
bt.add(b);
}
} catch (Exception e){
out.println("Failed!"+ e);
}
request.setAttribute("bt", bt);
request.getRequestDispatcher("/StoryTitlePage.jsp").forward(request,response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
BeanTitle如下:
public class BeanTitle
{
private String btitle;
public String getBtitle() {
return btitle;
}
public void setBtitle(String btitle) {
this.btitle = btitle;
}
}
JSP页面(“ StoryTitlePage.jsp”)如下:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<jsp:useBean id="storylist" class="serv.TitlePopulatorServlet" scope="request" />
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Story Title Page</title>
</head>
<body>
<form action="/ReportData/DisplayReport" method="post" >
Please select an element:
<select id="selectedRecord" name="selectedRecord">
<c:forEach var="item" items=${storylist.bt} >
<option>${item.tarr}</option>
</c:forEach>
</select>
<input type="submit" value="Submit">
</form>
</body>
</html>
但是,当我在服务器上启动TitlePopulatorServlet时,它不起作用。迭代/ EL在哪里出错?
Servlet将列表存储在请求中名为“ bt”的属性下。因此,它已经在请求中了。没必要做
<jsp:useBean id="storylist" class="serv.TitlePopulatorServlet" scope="request" />
那只会创建一个新的servlet实例,这没有任何意义。bt是一个请求属性。它不是servlet的属性。因此,使用${storylist.bt}
也没有任何意义。
您想遍历的元素bt
,因此您所需要做的就是
<c:forEach var="item" items="${bt}">
最后,的每个项目bt
都是类型BeanTitle
。而你在做
${item.tarr}
这相当于调用
beanTitle.getTarr()
BeanTitle中没有tarr属性。唯一的属性是btitle
(因为该类的唯一吸气剂被命名为getBTitle()
)。
所以你必须使用的是
${item.btitle}
您的命名很糟糕,只会让您更加困惑。您为什么不使用真实的单词来命名您的类和属性?例如
public class Book {
private String title;
public String getTitle()
...
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句