Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsp 自定义类列表的useBean类属性值_Jsp_Servlets_Jstl - Fatal编程技术网

Jsp 自定义类列表的useBean类属性值

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",

我刚刚开始学习JSP和servlet。据我所知,我们可以从servlet设置会话属性,并使用jsp:useBean在jsp中使用它

现在我有一个名为Environment的自定义类,它具有某些属性。在servlet中,我调用一个服务方法,该方法返回环境对象列表。然后设置session属性

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)时,应该使用Bean的“class”和“type”属性值是什么

属性:

class="package.class" Instantiates a bean from a class, using the new keyword and the class constructor. The class must not be abstract and must have a public, no-argument constructor. The package and class name are case sensitive. class=“package.class” 使用new关键字和类从类实例化bean 构造器。类不能是抽象的,必须具有公共, 没有参数构造函数。包和类名区分大小写。 type=“package.class” 如果bean已经存在于作用域中,则为bean提供除 从中实例化它的类。类型的值必须是 类的超类或由类实现的接口。如果您使用类型 没有类或beanName,就不会实例化任何bean。包和类名 区分大小写。 尝试不将类指定为:

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