Non*_*one 3 eclipse jsp jstl autocomplete
我正在使用Eclipse,制作一个动态的Web项目,并在我的JSP中包含了JSTL.一切正常,我有核心自动完成等等.
问题如下:当我foreach
使用JSTL自定义对象的特定数组列表时,我无法访问实例的属性.这是一个例子:
<c:forEach var="person" items="${listOfPeople}">
<c:out value="${person.name}" />
</c:forEach>
Run Code Online (Sandbox Code Playgroud)
所以,person
有一个属性getName()
.如果我使用scriplets例如:
<%
Person p = new Person();
p.getName();
%>
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
服务器将评估表达式并将值返回给标记.
如果您使用的是JSP 1.x版本,则可能会得到类似这样的内容(preudocode):
COutTag tag = new COutTag();
tag.setPageContext(pageContext);
tag.setValue("${person.name}");
tag.doStartTag();
// ... etc
Run Code Online (Sandbox Code Playgroud)
在运行时,person
在页面范围内搜索密钥,如果找不到,则在请求范围内搜索,然后在会话范围内搜索,直到找到它为止.然后发现的任何东西必须有一个getName
方法,并且被称为等.
JSP通常用作视图,在某处您person
创建对象并将其放置在范围内,并将流转发到JSP.您的IDE如何在设计时知道运行时每个范围内的内容?它不知道没有自动完成.
如果您改为<% Person p = new Person(); p.getName(); %>
那么这是一个包含Java代码的scriptlet,并且您的IDE知道是一个Person
类并且可以检查它并且知道属性和方法,因此您有自动完成,但是对于EL表达式没有,它们只是字符串.
归档时间: |
|
查看次数: |
2265 次 |
最近记录: |