【问题标题】:Eclipse autocomplete for JSTL, JSP用于 JSTL、JSP 的 Eclipse 自动完成功能
【发布时间】:2013-05-23 05:55:37
【问题描述】:

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

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

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

所以,person 有一个属性 getName()。如果我使用脚本,例如:

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

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

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

【问题讨论】:

  • 如果可能的话,能否在创建变量 listOfPeople 和 Person 类的位置添加代码?

标签: eclipse jsp autocomplete jstl


【解决方案1】:

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

类似&lt;c:out value="${person.name}" /&gt; 的代码被翻译成类似这样的代码(伪代码):

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

服务器将评估表达式并将值返回给标签。

如果您使用的是 JSP 1.x 版本,您可能会得到如下内容(preudocode):

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

以及来自表达式的标签本身calls his own evaluator to get a value

在运行时,在页面范围内搜索person 键,如果没有找到,则在请求范围内搜索,然后在会话范围内搜索,直到找到为止。然后找到的任何东西都必须有一个 getName 方法,并且被称为 etc。

JSP 通常用作视图,在某处创建 person 对象并将其放置在范围内,然后将流转发到 JSP。您的 IDE 在设计时应该如何知道运行时每个范围内的内容?它不知道所以没有自动完成。

如果您改为使用 &lt;% Person p = new Person(); p.getName(); %&gt;,那么这是一个包含 Java 代码的脚本,您的 IDE 知道这是一个 Person 类,并且可以检查它并知道属性和方法,以便您拥有自动完成功能,但是对于 EL 表达式,没有't,它们只是字符串。

【讨论】:

    猜你喜欢
    • 2012-06-13
    • 2017-11-10
    • 2012-01-24
    • 2014-02-25
    • 2014-03-11
    • 2020-12-14
    • 1970-01-01
    • 2011-06-11
    相关资源
    最近更新 更多