【问题标题】:How to syntactically improve include statements如何在语法上改进包含语句
【发布时间】:2012-05-07 14:15:14
【问题描述】:

使用下面的代码,我需要维护包含加载顺序,但我想知道是否有更好的方法可以在不使用这么多 <% %> 的情况下在语法上完成此操作

base.jsp

<%

List<String> cssFiles = new ArrayList<String>();
List<String> jsFiles = new ArrayList<String>();

/*
 * Load all CSS/JS files we want on every page
 */

%>
<%@ include file="includes/jquery.jsp" %>
<%

cssFiles.add("/css/global");
jsFiles.add("/js/global");

%>
<%@ include file="includes/jquery_ui.jsp" %>

view.jsp

<%@ include file="../base.jsp" %>
<% cssFiles.add("/css/content/view"); %>
<%@ include file="../header.jsp" %>

【问题讨论】:

    标签: java jsp


    【解决方案1】:

    更好的方法是使用模型-视图-控制器模式并将所有代码移动到控制器中,这样您的 JSP 就不会首先拥有那么多 &lt;% %&gt;

    【讨论】:

    • 这就是我最初设置所有内容的方式...但我遇到了问题...stackoverflow.com/questions/10352472/…
    • 这个问题可以通过使用 Set 而不是 List 轻松解决,因此集合中的所有元素都是唯一的。
    • 不,另一个问题不仅仅是项目是独一无二的,而是在页面 A 我想要 2 个 css 文件,在页面 B 我只想要 1 个 css 文件,然后在第 5 页我想要 5 CSS 文件。当页面发生变化时,该方法不会从 cssFiles 数组中删除数据,它只是添加到其中。
    • 当然。在您的 Controller 类中,您将这些集合定义为控制器类成员,但控制器实例在 http 请求之间是相同的,因此您需要为每个请求创建这些集合。
    • 这就是为什么这是一个坏主意。反正,不会和你争论。我相信您的问题已经得到解答。
    【解决方案2】:

    在现代 JSP 应用程序中根本不需要 &lt;% /*foo*/ %&gt; 形式的 Scriptlet 代码 sn-ps。使用表达式语言将数据注入视图并利用标签库进行显示逻辑。

    使用 MVC 方法进行开发。开发人员通常会利用一个框架(其中有很多)。

    至少,使用servlet as a controller and just utilize the JSP as the view

    【讨论】:

    • 我还没有找到在我的应用程序中包含 CSS/JS 文件的好方法。在 JSP 中执行此操作是我发现保持对加载顺序的控制的唯一方法,并确保只有特定的 css/js 文件才会加载到需要它们的页面上。
    猜你喜欢
    • 1970-01-01
    • 2014-07-26
    • 1970-01-01
    • 2020-09-30
    • 2014-06-14
    • 2011-02-13
    • 2021-10-30
    • 1970-01-01
    • 2013-10-18
    相关资源
    最近更新 更多