我最近采用了别人的代码(动态Web项目),并在Eclipse中遇到大量错误,警告和错误的语法突出显示.我已经将它缩小到这4行代码(创建一个新的Dynamic Web Project,然后是一个新的JSP页面,并将其放入正文):
${(1<2)? "" : "no"} <%for (int i = 0; i < 5; i++) {%> <div>${5}</div> <%}%>
错误/警告/语法突出显示不正确
line1: yellow warning line under ‘<‘: Invalid character used in text string
(${(1<2)? “yes” : “no”}).line2: red error line under ‘f’:
Multiple annotations found at this line: 1) Syntax error, insert “Finally” to complete TryStatement. 2) Syntax error, insert “}” to complete ClassBodyline2: red error line under ‘)’: Syntax error on token “)”, try expected after this token
line3: yellow warning line under ‘div’: No end tag (/div).
line3: yellow warning line under ‘<‘ of closing div: Multiple annotations
found at this line: 1) Invalid character used in text string (${5} <%}%>). 2) Invalid character used in text string (${5} <%}%>).line3: ‘/div’ is black and purple (for scriptlet code?) instead of green for HTML code
line4: The opening and closing scriplet tags ‘<%’ and ‘%>’ are black instead of orange
该页面在浏览器中按预期工作:您获得“5”五次.如果将第1行的空引号更改为“是”,则保存,在编辑器中关闭文件,然后在项目浏览器中单击它>验证,然后重新打开它:所有错误/警告/不正确的语法突出显示消失,除了第一个(无效字符).这令人难以置信的刺激.任何想法将不胜感激.
Eclipse WTP很棒,但对我来说这个问题在Eclipse WTP中也是一个 epic fail.他们似乎正在努力,但在那之前我只是通过Web>禁用/设置忽略与工作区首选项中的这些东西相关的所有验证. JSP文件>验证>将列表滚动到最底部并将所有EL验证设置设置为忽略.同样在主验证首选项中,取消选中与JSP相关的所有复选框.然而,这似乎并没有消除每一个警告/错误,但它至少可以减少烦恼.IntelliJ IDEA更好地处理JSP / EL验证.
对我来说,这些症状让我觉得WTP正在使用regexp而不是基于堆栈的解析器来验证HTML / JSP / EL.在结构化标记的情况下,这是big no-no.