将对象从servlet传递给jsp(返回null)

时间:2013-08-03 09:47:58

标签: jsp servlets null


我知道这个问题有很多主题,但是我无法解决这个问题。

我有一个课程,我在其中定义一个对象

public class UserBean{

    private String string1;
    private String string1;

    public String getString1(){
           return String1;
    }

    public String getString2(){
           return String2;
}

然后在我的Servlet中我有:

    //Create my Object1 and some other code...

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {

    // some code...

    HttpSession session = request.getSession(true);
    request.setAttribute("PassingObj", Object1);
    RequestDispatcher disp = getServletContext().getRequestDispatcher("/mypage.jsp");
    disp.forward(request, response);

然后在我的jsp中:

    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

    <% ArrayList<UserBean> cis = (ArrayList) session.getAttribute("PassingObj"); %>
    <c:forEach var="item" items="${cis}">
          <c:out value="${cis.getString1}" />
    </c:forEach>

然后我得到null ..
我的对象里面有数组...我测试在servlet内部的控制台中打印相同的东西,它工作正常!感谢..!

1 个答案:

答案 0 :(得分:1)

首先,您要设置请求属性,并从会话访问它。当然你不会得到它。

其次,您无法访问EL中的scriplets中的变量集。事实上,你不需要,你根本不应该使用scriplet。事实上,在你的情况下设置scriplet变量是没有意义的。

第三,您应该使用循环变量item来访问bean变量。此外,您应该使用它的名称直接访问该字段,而不是getString。另外,检查 getters ,您将返回错误的变量。那将无法编译。

总之,您可以使用 JSTL EL 直接遍历列表:

<c:forEach var="item" items="${PassingObj}">
      ${item.string1}
</c:forEach>

注意,您不需要使用<c:out />标记。直接使用EL,将实现相同的功能。

最后,请为您的请求属性和UserBean字段提供一些合理的名称。