最佳实践
理想情况下,JSP中不应该再有任何块。<% // scriptlet %>
JSP已经从简单地将Java代码隐藏在标准操作和自定义标签后面发展到使用表达式语言,JSTL和现在的OGNL表达式从任何一个应用程序范围(如会话,请求,页面等)或复杂数据存储(如Struts 2中的ValueStack)中可用的预填充JavaBeans中获取结果(对于刚刚处理的请求)。
因此,正确的解决方案看起来像这样(不能使用EL,因为我们需要“用户”引用)
<jsp:useBean id="user" class="foo.User" /> <!-- scope="page" by default -->
当添加到 时,这行代码将创建一个新的 Bean 并将其添加到作用域中,然后,同一行代码将从作用域中检索该 Bean,并为其提供一个名为的引用,然后可以在文件的其余部分使用该引用。Title.jsp
User
page
Header.jsp
User
page
user
但是,由于Java代码的其余部分不是用标签编写的,因此这没有多大意义。因此,您也可以使用<% // scriptlet %>块之一,简单地将两个 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 片段是包含 JSP/HTML 段而没有开始和结束页眉标记的文件(当然,除非它是页眉或页脚片段)。因此,尽管您必须重命名文件才能使Eclipse将它们识别为片段(而不是验证);主要优点是:.jspf
.jspf
- 文件可以位于文件夹结构中的任何位置
- 扩展清楚地表明它是一个包含
- 新片段将被自动识别
如果包含文件的数量很大,或者由于某种原因无法重命名它们,那么您的下一个最佳选择是将它们移动到单独的文件夹中(如),然后从JSP语法验证中排除文件夹本身。includes
同样,转到“项目>属性>验证”,并在启用项目特定设置的情况下,单击浏览类型按钮以访问设置。[...]
JSP Syntax Validator
在这里,首先创建一个,然后从 JSP 语法验证中排除一个文件夹(如图像中的 WebContent/include)。Exclude Group
Add Rule
现在,Eclipse 将停止报告此包含文件夹中丢弃的任何 JSP 文件的错误。您也可以对单个文件使用相同的方法,但它的实用程度将再次取决于您有多少这样的片段。
参考文献:
如何避免JSP文件中的Java代码?