跨多个包含块的Java变量-无法解析变量

跨多个包含块的Java变量-无法解析变量,java,eclipse,jsp,variables,include,Java,Eclipse,Jsp,Variables,Include,我的jsp页面如下所示: MyPage.jsp 在Header.jsp中,用户被引用为 user.setName("John"); Eclipse在header.jsp文件中显示“用户无法解析为变量”的错误。我完全明白为什么有没有办法告诉Eclipse忽略这个特定变量的特定错误?这里可以做些什么 在工作中,我支持一些旧的(又大又丑的)Java应用程序,它实际上是一个web应用程序。我正在尝试将这个Java项目转换为Java动态Web项目。在我转换它之前,不知何故Eclipse并不关心这些到处可

我的jsp页面如下所示:

MyPage.jsp 在Header.jsp中,用户被引用为

user.setName("John");
Eclipse在header.jsp文件中显示“用户无法解析为变量”的错误。我完全明白为什么有没有办法告诉Eclipse忽略这个特定变量的特定错误?这里可以做些什么

在工作中,我支持一些旧的(又大又丑的)Java应用程序,它实际上是一个web应用程序。我正在尝试将这个Java项目转换为Java动态Web项目。在我转换它之前,不知何故Eclipse并不关心这些到处可见的挂起的变量。现在,在动态Web项目中,Eclipse正在抱怨


重写代码是不可能的。每个jsp文件都由多个包含大量全局变量的include组成。对于您的问题:有没有办法告诉Eclipse忽略这个特定变量的特定错误?如上所述,错误来自Eclipse中的验证框架。您最好告诉eclipse忽略该文件,而不是该错误或该变量。要执行此操作,请右键单击该项目并打开其“属性”对话框。到达后,选择“验证”并单击“启用项目特定设置”复选框。从那里您可以打开或关闭特定的验证。就我个人而言,我觉得Eclipse验证器并没有那么有用,而且它们需要相当多的处理时间,所以我几乎关闭了所有验证器!但是,您可以通过“设置”列进行一些细粒度控制。您点击JSP内容验证器旁边的省略号(例如),您可以专门从那里排除Header.JSP

希望这能有所帮助,但它只提供了早期评论的细节。

最佳实践 理想情况下,JSP中不应该再有任何

JSP已经从简单地将Java代码隐藏在标准操作和自定义标记后面发展到使用表达式语言、JSTL和现在的OGNL表达式从任何一个应用程序范围(如会话、请求、页面等)中可用的预填充JavaBean获取结果(对于刚刚处理的请求)或复杂的数据存储(如Struts 2中的ValueStack)

因此,一个合适的解决方案应该是这样的(不能使用EL,因为我们需要一个“用户”参考)

答复 如果代码库太大而无法修复,那么使用任何最佳实践都是不切实际的;您可以将EclipseIDE配置为忽略JSP语法验证错误,或者最好只对JSP片段或特定文件和文件夹关闭它们

在工作区中选择web项目后,转到
project>Properties>Validation>JSP Syntax
。然后
启用特定于项目的设置
并关闭
验证JSP片段
,如下所示

JSP片段是一个
.jspf
文件,它包含一个JSP/HTML段,没有打开和关闭页眉标记(当然,除非它是页眉或页脚片段)。因此,尽管Eclipse必须将文件重命名为
.jspf
,才能将它们识别为片段(而不是验证);主要优点是:

  • 文件可以位于文件夹结构中的任何位置
  • 扩展名清楚地表明它是一个include
  • 新片段将自动识别
如果include文件的数量很大,或者由于某种原因无法重命名它们,那么下一个最好的选择是将它们移动到一个单独的文件夹中(如
includes
),然后将文件夹本身从JSP语法验证中排除

再次转到Project>Properties>Validation,并在启用项目特定设置的情况下,单击浏览类型
[…]
按钮以访问
JSP语法验证器设置

在这里,首先创建一个
排除组
,然后将
添加规则
添加到从JSP语法验证中排除文件夹(如图像中的WebContent/includes)

现在Eclipse将停止报告在这个includes文件夹中丢弃的任何JSP文件的错误。您也可以对单个文件使用相同的方法,但它的实用性又取决于您有多少这样的片段

参考文献:

我认为不能按变量名筛选验证,可以按文件类型或文件夹筛选。很明显,您可以取消对JSP文件的所有验证,但我想您对此不感兴趣。顺便说一句,我可以想象Emacs用户满意地阅读您的问题,在Emacs中肯定会有这样做的方法(我不确定,因为我使用了…Eclipse或Intellij)我在这里发现了类似的问题:基本上是一样的,关闭验证…是的,Eclipse在处理JSP时非常没有希望,这个选项似乎不存在了。还是搬到别的地方去了?
User user = new User();
user.setName("John");
 <jsp:useBean id="user" class="foo.User" /> <!-- scope="page" by default -->
<% // in Title.jsp
  request.setAttribute ("user", new User());
%>

<% // in Header.jsp
  User user = request.getAttribute ("user");
  user.setName ("John Doe");
%>