假设你有这样的东西:
<%@ 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>
如何查看其他密钥(如密钥:name
或description
)的值。我主要是一个JavaScript工程师,所以JSP对我来说仍然是新的。
比如说,我想在一个新的<td>
中使用price
,但是product.price
不起作用,我无法找到正确的密钥来访问它的真实名称。
我试着在网上搜索答案,但没有找到。
2条答案
按热度按时间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表达式使用内省机制来查看对象并找出其属性。xpszyzbs2#
智能IDE可以在悬停/完成
${product.***}
时看到并自动完成。如果你的没有,那么它很可能没有通过标准的方式或通过标准的MVC框架(例如:JSF、Faces、SpringMVC等),而是以IDE无法识别的自主开发方式。在EL中,可以调试/打印
${product}
后面的对象的具体Class
的FQN,如下所示:暂时将它放在同一个JSP文件中,它将打印类似
com.example.model.Product
的内容,然后您可以使用它来标识相关的源代码。参见: