-2

SpringMVCに基本的なアプリがあります。私のすべてのコントローラーは、以下に示すスーパークラスを拡張します。ここでの問題は、コントローラーメソッドに触れるたびにcssFilesとがリセットされないことです。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

私はこのコードをテストしませんでしたが、私が試したのは明らかなことです:

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をオーバーライドする必要がある場合は、htmlタグの後にedit.jsp固有のjsを配置します。したがって、編集ファイルは次のようになります。

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

多分あなたはしたい

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

親コントローラーが常に生きている場合、コンストラクターで?

親コンストラクターのメソッドをどのように呼び出していますか?

于 2012-04-27T14:30:17.147 に答える
0

ビューにjsファイルとcssファイルを追加する方法が間違っていると思います。

cssファイルとjsファイルのリソースハンドラーをサーブレットxml構成ファイルに追加する必要があります。私は同じために次のコードを使用します。

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

これにより、Webアプリケーションルートのresourcesフォルダー内のすべてのリソースに対するSpringのDispathcerサーブレットがスキップされます。

これを行った後、必要な場所にそれらをjspファイルに含める必要があります。

乾杯...

于 2012-05-05T06:00:19.277 に答える
0

の代わりにSetを使用してみてくださいArrayList

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

重複する要素を含まないコレクション。より正式には、セットには、e1.equals(e2)のような要素e1とe2のペアは含まれず、最大で1つのnull要素が含まれます。その名前が示すように、このインターフェースは数学的な集合の抽象化をモデル化します。

于 2012-05-07T14:51:53.200 に答える
-1

Setの代わりに使用してみてくださいArrayList

于 2012-05-07T15:24:43.503 に答える