0

我对 JSP 很陌生,所以我需要你的帮助。谷歌没有给我我要找的东西,我可能只是输入了错误的搜索词。所以请原谅我,但我认为这是一个非常愚蠢的问题,但是网上似乎没有关于它的内容。

我创建了一个登录屏幕(工作正常)并检查了凭据(工作正常),主屏幕获得了一个应该评估的 DTO。

如您所见,有一个 jsp:getProperty 标记,如果我尝试使用 jsp:getProperty 访问参数名称,它工作正常。我想做一些额外的检查,因此我尝试访问 <% %> 部分中的属性,但是在那里它为空。在使用 jsp:useBean 标记检索 <<% %> 部分中的对象后,有没有办法访问它?

这是主要的jsp文件:

 <?xml version="1.0" encoding="ISO-8859-1" ?>
 <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
 pageEncoding="ISO-8859-1"%>
 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 
 <%@ page import="de.daniel.docmanager.dto.User"  %>   
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"   
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
 </head>
 <body>
 <jsp:useBean id="user" class="de.daniel.docmanager.dto.User" scope="session">  
 </jsp:useBean>

<%
String name =  user.getName();
System.out.println("name: " + name);  //<= name is null
%>

Hello <jsp:getProperty property="name" name="user"/> //<= works fine
</body>
</html>

非常感谢您的支持。我真的很感激。

4

1 回答 1

2

在 JSP中使用scriptlet是一种不好的做法。阅读这篇精彩的SO Q&A:如何避免 JSP 文件中的 Java 代码?关于这个话题。


回到你的问题。您正在使用标准操作将 bean 定义为:

<jsp:useBean id="user" class="de.daniel.docmanager.dto.User" scope="session">  
</jsp:useBean>

useBean标签session. 如果该实例不存在,它将创建一个"de.daniel.docmanager.dto.User"的新实例,并将其放入session.

您必须从session范围中检索对象:

<%
 String name =  ((de.daniel.docmanager.dto.User)session
                                      .getAttribute("user")).getName();
 System.out.println("name: " + name);  
%>

我想做一些额外的检查,因此我尝试访问 <% %> 部分中的属性

您可以为此目的使用JSTL或一些标记库。

于 2013-07-14T17:49:37.820 回答