关于访问对象中的键的JSP问题?

c3frrgcw  于 2023-09-28  发布在  其他
关注(0)|答案(2)|浏览(97)

假设你有这样的东西:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<table>
     <c:forEach items="${products}" var="product">
         <tr>
             <td>${product.name}</td>
             <td>${product.description}</td>
          </tr>
      </c:forEach>
</table>

如何查看其他密钥(如密钥:namedescription)的值。我主要是一个JavaScript工程师,所以JSP对我来说仍然是新的。
比如说,我想在一个新的<td>中使用price,但是product.price不起作用,我无法找到正确的密钥来访问它的真实名称。
我试着在网上搜索答案,但没有找到。

thtygnil

thtygnil1#

类似这样的代码是使用JSTL标记的JSP代码片段。JSTL在其标记中使用了大量的EL表达式。它是代码中的<c:forEach>标记。即使定义了整个JSP页面,您也可能不知道其中使用的属性。如果您尝试在浏览器中访问此类页面,则会失败,内容为空或返回404错误代码。最后一种情况是如果您的JSP页面位于WEB-INF文件夹下。
出于什么原因,您仍然不能访问视图目录中的JSP页面?
事实是WEB-INF是服务器上的受保护目录;从外部访问文件是不可能的。应用程序可以将其文件存储在此目录中,以确保用户无法访问这些文件。这主要适用于配置文件和其他内部文件。一些MVC框架中的JSP文件开始放置在那里,以限制直接访问视图,绕过控制器。同样的事情也适用于使用分派器实现MVC模式的servlet。由于这些JSP在没有控制器初始化的情况下无法运行,因此直接访问这些页面将引发异常。
初始化由控制器执行的JSP页面,其中所有属性都已准备好并放入JSP范围中。一旦它准备好显示,控制器就使用一个调度器将其请求转发到JSP页面。所有属性都被转移到新请求中,并且可以通过JSTL标记中的EL表达式找到。因此,您应该查看控制器代码,以查找它作为属性传递给JSP的对象。通常控制器不关心对象结构,因为它将它们保存为Object。EL表达式使用内省机制来查看对象并找出其属性。

xpszyzbs

xpszyzbs2#

  • 如何查看其他密钥(如密钥:名称或描述),该“产品”对象具有?*

智能IDE可以在悬停/完成${product.***}时看到并自动完成。如果你的没有,那么它很可能没有通过标准的方式或通过标准的MVC框架(例如:JSF、Faces、SpringMVC等),而是以IDE无法识别的自主开发方式。

  • 您如何确定哪个类是正确的类?我只知道基本的课程。通常它们看起来像什么,并在.java文件中查找它们。我不知道如何识别哪一个导致产品收集虽然。*

在EL中,可以调试/打印${product}后面的对象的具体Class的FQN,如下所示:

${product['class']}

暂时将它放在同一个JSP文件中,它将打印类似com.example.model.Product的内容,然后您可以使用它来标识相关的源代码。

参见:

相关问题