Jsp 自定义类列表的useBean类属性值
我刚刚开始学习JSP和servlet。据我所知,我们可以从servlet设置会话属性,并使用jsp:useBean在jsp中使用它 现在我有一个名为Environment的自定义类,它具有某些属性。在servlet中,我调用一个服务方法,该方法返回环境对象列表。然后设置session属性Jsp 自定义类列表的useBean类属性值,jsp,servlets,jstl,Jsp,Servlets,Jstl,我刚刚开始学习JSP和servlet。据我所知,我们可以从servlet设置会话属性,并使用jsp:useBean在jsp中使用它 现在我有一个名为Environment的自定义类,它具有某些属性。在servlet中,我调用一个服务方法,该方法返回环境对象列表。然后设置session属性 List<Environment> environments = eService.fetchEnvironments(); session.setAttribute("environments",
List<Environment> environments = eService.fetchEnvironments();
session.setAttribute("environments", environments);
List environments=eService.fetchEnvironments();
session.setAttribute(“环境”,环境);
并使用RequestDispatcher将请求和响应对象转发到目标JSP。
现在我想在JSP中访问这个属性。因此,我在JSP(目标JSP)中执行以下操作:
fetchEnvironments()方法有如下内容:
List<Environment> environmentList = new ArrayList<Environment>();
//Usual stuff
//Creating & initializing Connection, Statement, Sql string
//etc
ResultSet environments = st.executeQuery(sql);
while(environments.next())
{
Environment environment = new Environment();
environment.setEnvID(environments.getInt(1));
environment.setEnvName(environments.getString(2));
environment.setEnvDescription(environments.getString(3));
environmentList.add(environment);
}
List-environmentList=new-ArrayList();
//平常的东西
//创建和初始化连接、语句、Sql字符串
//等
结果集环境=st.executeQuery(sql);
while(environments.next())
{
环境=新环境();
setEnvID(environments.getInt(1));
setEnvName(environments.getString(2));
setEnvDescription(environments.getString(3));
环境列表。添加(环境);
}
当打开上面提到的JSP文件时,我发现如下错误:
/EnvironmentManager.jsp (line: 31, column: 2) The value for the useBean class attribute java.util.ArrayList<test.project.dto.Environment> is invalid.
/EnvironmentManager.jsp(第31行,第2列)useBean类属性java.util.ArrayList的值无效。
所以我的问题是我在这方面犯了什么错误?我给出的“类”和“类型”属性是否正确
为了使问题更具建设性:当我有一个自定义类的列表对象(List <jsp:useBean id="environments" type="java.util.List<test.project.dto.Environment>"
scope="session"></jsp:useBean>
您正在使用范围作为请求
从jstl和el开始,而不是像Dave所指出的那样从jsp:useBean开始,总是很好的
将jsp中的jstl标记导入为:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
并在列表上迭代,如下所示:
<c:forEach items="${environments}" var="environment" varStatus="status1">
Id: <c:out value="${environment.envId}"/>
Name: <c:out value="${environment.envName}"/>
</c:forEach>
身份证件:
姓名:
我解决了如下类似问题:
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
...
</dependencies>
在jsp中
<jsp:useBean id="users" type="java.util.List<net.roseindia.bean.UserBean>" scope="request"/>
及
${currentList.id}
${currentList.firstName}
${currentList.lastName}
我希望这会有帮助
这里的所有代码:为什么不将列表作为请求属性公开,并使用JSTL/JSP EL访问/迭代它?@DaveNewton感谢您的回复。对成功了。显然,session属性也起作用,但只有在我使用scriptlet将其拉入jsp时才起作用。有没有办法只使用useBean?我知道我在这里遗漏了一些非常简单的东西。可能“class”和“type”属性的值必须更改,但不知道更改为什么。谢谢@Prasad。这有帮助。我试过了,但我犯的愚蠢错误是在范围中使用'request',而我在'session'范围中设置属性。另一个新手问题:jsp:useBean不是JSTL的一部分吗?或者换句话说,我可以在没有JSP:useBean的情况下在JSP中捕获这个“环境”对象吗?是的,JSTL EL将查找页面、请求、会话和应用程序范围中指定的属性,并返回其值。这不需要jsp:useBean的支持。在您的场景中,如果您与设置列表处于同一会话中,您可以使用jstl尝试上述代码,并在视图中查看输出。更多信息可以在stackoverflow wiki上找到:谢谢!感谢您的帮助。:)
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
...
</dependencies>
request.setAttribute("users", dao.getAllUsers()); // List
<jsp:useBean id="users" type="java.util.List<net.roseindia.bean.UserBean>" scope="request"/>
<c:forEach var="currentList" items="${users}">
<tr>
<td>${currentList.id}</td>
<td>${currentList.firstName}</td>
<td>${currentList.lastName}</td>
<td align="center"><a href="UserHandler?action=editform&userId=${currentList.id}">Update</a></td>
<td align="center"><a href="UserHandler?action=delete&userId=${currentList.id}">Delete</a></td>
</tr>
</c:forEach>