0


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

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

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内部的控制台中打印同样的东西,它工作正常!谢谢..!

4

1 回答 1

1

第一个问题,您正在设置请求属性,并从session访问它。你当然不会得到它。

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

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

总之,您可以使用JSTLEL直接迭代列表:

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

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

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

于 2013-08-03T10:15:22.163 回答