我知道这个问题有很多主题,但是我无法解决这个问题。
我有一个课程,我在其中定义一个对象
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内部的控制台中打印相同的东西,它工作正常!感谢..!
答案 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
字段提供一些合理的名称。