将对象数组从servlet发送到JSP

时间:2012-02-20 11:14:34

标签: java jsp servlets

我想通过请求将我自己的对象数组发送到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 个答案:

答案 0 :(得分: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的一个例子:

<%@ 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>

我希望这个例子可以帮助你。

答案 1 :(得分:3)

你可能

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

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

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

答案 2 :(得分:2)

request.getAttribute("articles");

以上将始终返回String,因此您需要进行强制转换,使用此

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

并在您的jsp页面中导入您的文章类,在导入级别添加

<%@ page import="yourpackage.Article"%>