2012-02-20 105 views
4

我想根据请求将我自己的对象数组发送到JSP页面。将servlet对象数组发送到JSP

在servlet中的这部分代码中,我将获取我的数据,将它放在对象数组中,并将它们设置为请求。

 if (request.getParameter("todo").equals("show_article_list")) { 
     try { 
      Article[] articles = this.getArticleList(); 

      request.setAttribute("articles", articles); 
      RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("article/article_list.jsp"); 
      dispatcher.forward(request, response); 
     } catch (Exception e) { 
     } 
    } 

    public Article[] getArticleList() throws Exception { 
    db data = new db(); 
    Connection con = data.OpenConnection(); 

    PreparedStatement statement = con.prepareStatement("SELECT * FROM `article`"); 
    ResultSet result = statement.executeQuery(); 


    int size = 0; 
    if (result != null) 
    { 
     if (result.last()) { 
      size = result.getRow(); 
      result.beforeFirst(); 
     } 
    } 

    Article[] articles = new Article[size]; 
    int i = 0; 
    while(result.next()){ 
     articles[i] = new Article (
       result.getInt(1), 
       result.getString(2), 
       result.getString(3), 
       result.getString(4)); 
     i++;   
    } 

    return articles; 
    } 

这是我的课:

public class Article { 
public Integer getId(){return id;} 

public String getTitle(){return title;} 
public void setTitle(String title){this.title = title;} 

public String getText(){return text;} 
public void set(String text){this.text = text;} 

public String getDescription(){return description;} 
public void setDescription(String description){this.description= description;} 

private Integer id; 
private String title; 
private String text; 
private String description; 

public Article(Integer Id, String Title, String Text, String Description) 
{ 
    id = Id; 
    title = Title; 
    text = Text; 
    description = Description; 
} 
} 

在我的JSP页面,我想用循环对象request.getAttribute("articles");这样的阵列我该怎么办呢?

我必须使用<jsp:useBean/>还是别的?我试图做的是这样的:

Article[] articles = request.getAttribute("articles");

但我有一个错误:Article cannot be resolved to a type

我做了什么错?

回答

3

你可能

  • 忘记导入JSP中的第三类,使用<%@ page import="com.foo.bar.Article" %>
  • 忘记的getAttribute()的结果转换的文章数组:

Article[] articles = (Article[]) request.getAttribute("articles");

请注意,您不应该在JSP中拥有任何Java代码。您应该使用JSP EL,JSTL和其他自定义标签。阅读How to avoid Java code in JSP files?

2
request.getAttribute("articles"); 

以上将总是返回字符串,所以你需要做一个演员,用这个

Article[] articles = (Article[]) request.getAttribute("articles"); 

,并导入你的JSP页面你的文章类,在进口水平

<%@ page import="yourpackage.Article"%> 
添加此
11

您应该避免使用JSTL来使用scriptlet。 请通过下面的例子:

POJO类的例子:

public class Article { 
    private int id; 
    private String title; 

    public Article(int id, String title) { 
     this.id = id; 
     this.title = title; 
    } 

    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    public String getTitle() { 
     return title; 
    } 

    public void setTitle(String title) { 
     this.title = title; 
    } 

} 

一个Servlet的实例:

public class TestServlet extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     Article[] articles = 
       new Article[] {new Article(1, "Article one"), new Article(2, "Article two")}; 
     request.setAttribute("articles", articles); 

     RequestDispatcher dispatcher = request.getRequestDispatcher("/index.jsp"); 
     dispatcher.forward(request, response); 
    } 

} 

JSP页面的一个例子:

<%@ page language="java" contentType="text/html; charset=UTF-8" 
    pageEncoding="UTF-8"%> 
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>Insert title here</title> 
</head> 
<body> 
    <c:forEach items="${articles}" var="article"> 
    <c:out value="${article.id} ${article.title}"/><br /> 
    </c:forEach> 
</body> 
</html> 

结果HTML:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>Insert title here</title> 
</head> 
<body> 

    1 Article one<br /> 

    2 Article two<br /> 

</body> 
</html> 

我希望这个例子能帮助你。

+0

谢谢例如...但我有一个问题:当我在JSP上写入时''c:forEach items =“$ {articles}”var =“article”>'我的循环知道,$ {articles}数据是通过请求从servlet发送的,而不是其他方式...或者我应该注意它的位置,或初始化一个变量'articles' – 2012-02-20 14:11:15

+0

的范围?做一些像那样的范围=“请求” – 2012-02-20 14:31:46

+0

是的,范围。 JSP/Servlet API中有4个范围: 1)应用程序 - 全局范围[ServletContext](http://bit.ly/xChDI5) 2)会话 - 每个HTTP会话一个[HttpSessionContext](http:// bit.ly/zkPokb) 3)请求 - 每请求一个[ServletRequest](http://bit.ly/wMhTt5) 4)页 - 处理请求[PageContext](http:// bit。 ly/A0Btl8) 您可以选择适合您需求的拨款电话。 查看关于此主题的好资料 - [JSP中有哪些不同的范围?](http://bit.ly/aNUu7i) – 2012-02-20 15:35:39