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

时间:2013-05-16 17:37:49

标签: java eclipse jsp variables include

我的jsp页面看起来像这样:

MyPage.jsp

<%@ include file = "/Title.jsp" %>
<%@ include file = "/Header.jsp" %>
<html>...</html>

在Title.jsp中有一个“user”的实例,比如说:

User user = new User();
Header.jsp用户中的

被引用为

user.setName("John");

Eclipse在header.jsp文件中显示“用户无法解析为变量”的错误。我完全理解为什么。 有没有办法让Eclipse忽略这个特定变量的特定错误?这里有什么可以做的吗?。

在工作中,我支持一些实际上是Web应用程序的旧(且又大而丑)的Java应用程序。我正在尝试将此Java项目转换为Java动态Web项目。在我转换它之前,Eclipse并不关心这些悬挂变量到处都是。现在,在Dynamic Web Project中,Eclipse正在抱怨。

重写代码是不可能的。每个jsp文件由多个包含大量全局变量的文件组成。我不会触及它比我需要的更多。

2 个答案:

答案 0 :(得分:31)

最佳实践

理想情况下,JSP中不应该有任何<% // scriptlet %>块。

JSP已经从简单地将Java代码隐藏在标准操作和自定义标记之后演变为使用表达式语言,JSTL和现在的OGNL表达式来从预先填充的JavaBeans中获取结果(对于刚刚处理的请求)。应用程序范围(如会话,请求,页面等)或复杂的数据存储(如Struts 2中的ValueStack)。

因此,正确的解决方案看起来像(不能使用EL,因为我们需要“用户”参考)

 <jsp:useBean id="user" class="foo.User" /> <!-- scope="page" by default -->

添加到Title.jsp时,这行代码会创建一个新的User bean,并将其添加到page范围,然后Header.jsp中的相同代码行从User范围中检索page bean并为其指定一个名为user的引用,然后可以在整个文件的其余部分使用它。

但是,由于其余的Java代码没有使用标签编写,因此这没有多大意义。因此,您还可以使用&lt;%// scriptlet%&gt;中的一个简单地将两个JSP之间的bean作为请求属性传递。块。

<% // in Title.jsp
  request.setAttribute ("user", new User());
%>

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

答案

如果代码库太大而无法打捞并使用任何最佳实践,那么这是不切实际的;您可以将Eclipse IDE配置为忽略JSP语法验证错误,或者更好地仅关闭JSP片段或特定文件和文件夹。

在工作区中选择了您的Web项目后,转到Project > Properties > Validation > JSP Syntax。然后Enable project specific settings并关闭Validate JSP fragments,如下所示。

JSP validation off for fragments

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

  • 文件可以是文件夹结构中的任何位置
  • 扩展名清楚地表明它是一个包含
  • 将自动识别新片段

如果包含文件的数量很大或者由于某种原因无法重命名,那么您的下一个最佳选择是将它们移动到单独的文件夹(如includes)中,然后从JSP中排除文件夹本身语法验证。

再次,转到Project&gt;属性&gt;验证并启用项目特定设置后,单击浏览类型[...]按钮以访问JSP Syntax Validator设置。

Validation settings

在此处,首先创建Exclude Group,然后Add Rule 排除文件夹 (例如 WebContent / includes 在图像中。

Exclude folder

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

参考文献:
How to avoid Java Code in JSP-Files?

答案 1 :(得分:5)

对于你的问题:有没有办法让Eclipse忽略这个特定变量的特定错误?如上所述,错误来自Eclipse中的验证框架。你能做的最好的事情是告诉eclipse忽略那个文件 - 不是那个错误或那个变量。为此,右键单击项目并拉出其属性对话框。在那里,选择“验证”并单击“启用项目特定设置”复选框。从那里你可以打开或关闭特定的验证。就个人而言,我没有发现Eclipse验证器都是有用的,它们需要相当多的处理时间,所以我几乎把它们全部关闭了!但是,您可以通过“设置”列进行一些细粒度控制。您点击了JSP内容验证器旁边的省略号(例如),您可以从那里专门排除Header.jsp。

希望这会有所帮助,但它只提供了之前评论的详细信息。