我的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文件由多个包含大量全局变量的文件组成。我不会触及它比我需要的更多。
答案 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片段是一个.jspf
文件,它包含一个JSP / HTML段而不打开和关闭标题标记(除非它当然是标题或页脚片段)。因此,尽管您必须将文件重命名为.jspf
,以便Eclipse将其识别为片段(而不是验证);主要优点是:
如果包含文件的数量很大或者由于某种原因无法重命名,那么您的下一个最佳选择是将它们移动到单独的文件夹(如includes
)中,然后从JSP中排除文件夹本身语法验证。
再次,转到Project&gt;属性&gt;验证并启用项目特定设置后,单击浏览类型[...]
按钮以访问JSP Syntax Validator
设置。
在此处,首先创建Exclude Group
,然后Add Rule
到 排除文件夹 (例如 WebContent / includes 在图像中。
现在Eclipse将停止报告在此 includes 文件夹中删除的任何JSP文件的错误。你也可以 对单个文件使用相同的方法 ,但它的实用程度又取决于你有多少这样的片段。
答案 1 :(得分:5)
对于你的问题:有没有办法让Eclipse忽略这个特定变量的特定错误?如上所述,错误来自Eclipse中的验证框架。你能做的最好的事情是告诉eclipse忽略那个文件 - 不是那个错误或那个变量。为此,右键单击项目并拉出其属性对话框。在那里,选择“验证”并单击“启用项目特定设置”复选框。从那里你可以打开或关闭特定的验证。就个人而言,我没有发现Eclipse验证器都是有用的,它们需要相当多的处理时间,所以我几乎把它们全部关闭了!但是,您可以通过“设置”列进行一些细粒度控制。您点击了JSP内容验证器旁边的省略号(例如),您可以从那里专门排除Header.jsp。
希望这会有所帮助,但它只提供了之前评论的详细信息。