gpt4 book ai didi

用于 JSTL、JSP 的 Eclipse 自动完成

转载 作者:行者123 更新时间:2023-12-01 11:44:18 25 4
gpt4 key购买 nike

我正在使用 Eclipse,创建一个动态 Web 项目,并在我的 JSP 中包含了 JSTL。一切正常,我有可用的核心自动完成功能等等。

问题如下:当我使用 JSTL foreach 自定义对象的特定数组列表时,我无法访问实例的属性。这是一个例子:

<c:forEach var="person" items="${listOfPeople}">
<c:out value="${person.name}" />
</c:forEach>

因此,一个 有一个属性getName()。如果我使用 scriplet,例如:

<% 
Person p = new Person();
p.getName();
%>

Eclipse 在对象 p 上启用了自动完成功能,但是当我使用 JSTL 时,实例上没有自动完成功能。

我的 Eclipse 是否缺少或有问题,或者它是否意味着在没有自动完成的情况下工作?

最佳答案

EL 表达式没有自动完成功能。 EL 表达式只是在执行 JSP 时进行评估的字符串(当 JSP 转换为 Servlet 时,它们仍保留为字符串)。

代码如下:<c:out value="${person.name}" />被翻译成这样的东西(伪代码):

COutTag tag = new COutTag();
tag.setPageContext(pageContext);
tag.setValue(ExpressionEvaluator.evaluate("${person.name}"));
tag.doStartTag();
// ... etc

服务器将计算表达式并将值返回给标签。

如果您使用的是 JSP 1.x 版本,您可能会得到类似这样的内容(前代码):

COutTag tag = new COutTag();
tag.setPageContext(pageContext);
tag.setValue("${person.name}");
tag.doStartTag();
// ... etc

和标签本身 calls his own evaluator to get a value从表达。

在运行时 person键在页面范围内搜索,如果没有找到,则在请求范围内搜索,然后在 session 范围内搜索,直到找到为止。那么找到的任何东西都必须有一个 getName方法,这叫做等。

JSP 通常用作 View ,在某处你有 person对象创建并放置在作用域中,流被转发到 JSP。您的 IDE 应该如何在设计时知道您在运行时每个范围内将拥有什么?它不知道,所以没有自动完成。

如果你改为执行 <% Person p = new Person(); p.getName(); %>那么这是一个包含 Java 代码的小脚本,您的 IDE 知道它是一个 Person类并可以检查它并了解属性和方法,因此您可以自动完成,但对于 EL 表达式则没有,它们只是字符串。

关于用于 JSTL、JSP 的 Eclipse 自动完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16789045/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com