-2

我在 SpringMVC 中有一个基本的应用程序。我所有的控制器都扩展了一个超类,如下所示。这里的问题是每次触摸控制器方法时都不会重置cssFilesand 。jsFiles所以我最终会为每个页面视图content/view.js加载时间。x+1如果我已加载页面 3 次,它将包含 4xcontent/view.js文件。

我看到每次加载页面时都会附加这些值。为什么会发生这种情况,我该如何解决?

public class Controller {
    private List<String> cssFiles = new ArrayList<String>();
    private List<String> jsFiles = new ArrayList<String>();

    public Controller () {
        this.addCss("global");

        this.addJs("http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min");
        this.includejQueryUI();
        this.addJs("global");
    }

    public ModelAndView prepareModel (ModelAndView model) {

        model.addObject("cssFiles", cssFiles);
        model.addObject("jsFiles", jsFiles);

        return model;
    }
    public ModelAndView prepareModel (ModelAndView model, String title) {
        model.addObject("title", title);

        return prepareModel(model);
    }

    /*
     * Add a css file to the page
     */
    public void addCss (String cssPath) {
        if (cssPath.indexOf("://") < 1) {
            cssPath = "/cmt/css/"+cssPath;
        }

        cssFiles.add(cssFiles.size(), cssPath);
    }

    /*
     * Add a javascript file to the page
     */
    public void addJs (String jsPath) {
        if (jsPath.indexOf("://") < 1) {
            jsPath = "/cmt/js/"+jsPath;
        }

        jsFiles.add(jsFiles.size(), jsPath);
    }

    /**
     * Add a Rich Text Editor (TinyMCE) library to the page
     */
    public void includeRichTextEditor() {
        addJs("../lib/tiny_mce-3.5b3/tiny_mce");
    }

    /**
     * Add the jQuery UI library to the page
     */
    public void includejQueryUI() {
        addCss("../lib/jquery-ui-1.8.19/custom-theme/jquery-ui-1.8.19.custom");
        addJs("../lib/jquery-ui-1.8.19/jquery-ui-1.8.19.custom.min");
    }
}

我仍在努力确定这个问题的原因....有什么想法吗?

web.xml 的一部分

<!-- Standard spring configuration -->
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/applicationContext*.xml</param-value>
</context-param>

<!-- Spring Web MVC dispatcher servlet -->
<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>*.html</url-pattern>
    <url-pattern>*.json</url-pattern>
</servlet-mapping>
4

5 回答 5

0

也许你想做

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

如果父控制器始终处于活动状态,则在构造函数中?

你是如何调用父构造函数的方法的?

于 2012-04-27T14:30:17.147 回答
0

尝试使用Set而不是ArrayList.

private Set<String> cssFiles = new HashSet<String>();
private Set<String> jsFiles = new HashSet<String>();

不包含重复元素的集合。更正式地说,集合不包含一对元素 e1 和 e2 使得 e1.equals(e2),并且最多包含一个空元素。正如它的名字所暗示的,这个接口模拟了数学集合抽象。

于 2012-05-07T14:51:53.200 回答
0

虽然我没有测试这段代码,但我要尝试的显而易见的事情是:

public class Controller {
    private List<String> cssFiles;
    private List<String> jsFiles;
.......
 public Controller () {
        cssFiles = new ArrayList<String>();
        jsFiles = new ArrayList<String>();
        this.addCss("global");
        this.addJs("http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min");
        this.includejQueryUI();
        this.addJs("global");
    }

您能否详细说明重置的含义are not reset every time a controller method is touched

起初我误解了你的问题,这里是修订版:

<html>
<head>
<!--Above content is header-->
<!--Specific CSS for edit.jsp here-->
<!--Or if you want to override css classes inside <style></style>-->
</head>
<body>
<!--Load specific edit.jsp javascript at the end of the body tag-->
<!--Below content is footer-->
</body>
</html>

如果您需要覆盖一些 javascript,则将 edit.jsp 特定的 js 放在html标记之后。所以你的编辑文件看起来像这样:

<%@include file="header.jsp" %>
</head>
<body>
<!--some edit.jsp content -->
<%@include file="footer.jsp" %>
于 2012-04-30T17:01:33.160 回答
0

我认为您将 js 和 css 文件添加到视图的方式是错误的。

您应该在 servlet xml 配置文件中添加 css 和 js 文件的资源处理程序。我使用以下代码。

<mvc:resources location="/resources/" mapping="/resources/**" />

这将跳过 Spring 的 Dispathcer Servlet,以获取Web 应用程序根目录的资源文件夹中的所有资源。

完成此操作后,您只需将它们包含在您需要的 jsp 文件中。

干杯...

于 2012-05-05T06:00:19.277 回答
-1

尝试使用Set而不是ArrayList.

于 2012-05-07T15:24:43.503 回答