0

基本的に、javascript と jsp ファイルに 2 つの問題があります。最初の 1 つは、外部 js ファイルを jsp ファイルに含めることができないという事実に関するものです。私のプロジェクトの基本構造は次のようになります。

system.web
       |
      WebContent
         |
         js
           |
            nowa_postac.js
         |
         jsp
           |
            nowa_postac.jsp

nowa_postac.js は

 init = function() {
    test();
}
function test() {
        var myObject = JSON.parse('${gson}', null);
        alert(myObject.rasy.rasaList.length);
        alert(document.getElementById("testowy").id);
    }

nowa_postac.jsp 内に次のように JavaScript を含めます。

<script type="text/javascript" src="${pageContext.request.contextPath}/js/nowa_postac.js"></script>

しかし、jspファイルのnowa_postac.jsから関数を呼び出すことができず、

 src="<c:url value="/js/nowa_postac.js"

どちらも機能していないようです... test() は何も返しませんが、alert(test) はテキストを返すため、javascript ファイルが読み込まれます...また、test() が jsp ファイル内にある場合はすべて正常に動作します。

2 番目の問題は、jsp ページがロードされた後に関数を初期化する方法に関するものです。

<body onload='init()'>

init() では jsp で作成されたいくつかのオブジェクトを参照する必要があるため、ここでは良くありません...助けてくれてありがとう

4

1 に答える 1

0

この質問に答えるために jQuery を使用します。最初に、次の形式の includedScripts.txt という名前の外部 .txt ファイルがあります。

NameOfFile~pathToJSFile

例えば:

nowa_postac~nowaPostAc.js

nowaPostAc.js はScriptsというサブフォルダーに存在することに注意してください。

次に、jQuery をロードします (これを行う方法を知っていると仮定します。そうでない場合はhttp://www.learningjquery.com/2006/09/introducing-document-ready#more-5を参照してください) 。 jQueryファイルには次のものがあります:

/*
    *
    * LOAD ADDITIONAL SCRIPTS
    */
    jQuery.ajax(
    {
        url: 'Scripts/includedScripts.txt'
        , timeout: 5000
        , success:
            function (data) {
                myArray = data.split(/\n/);
                for (var i = 0; i < myArray.length; i++) {
                    theContents = myArray[i].split("~");
                    goodToGo = false;
                    theFileName = "";

                    if (theContents.length == 1) {
                        goodToGo = true;
                        theFileName = theContents[0];
                    }
                    else {
                        for (var t = 0; t < theContents.length; t++) {
                            if (theContents[t].indexOf(".") != -1) {
                                theFileName = theContents[t];
                            }
                            else if (location.pathname.indexOf(theContents[t]) != -1) {
                                goodToGo = true;
                            }
                        }
                    }
                    if (goodToGo == true) {
                        pathToScript = (theFileName.indexOf("..") >= 0) ? theFileName.replace("..", "") : "Scripts/" + theFileName;
                        script = document.createElement('script');
                        script.type = 'text/javascript';
                        script.src = pathToScript;
                        if (jQuery("#ctl01").length > 0) {
                            jQuery("#ctl01").append(script);
                        }
                        else if (jQuery(".page").length > 0) {
                            jQuery(".page").append(script);
                        }
                    }
                }
            }
        , error:
            function (xhr, textStatus, errorThrown) {
                //alert("Could not load additional modules, please alert IT");
                //make a log entry...
            }
        , async: false
    }); // load additional scripts

おそらく次の行を編集する必要があります。

if (jQuery("#ctl01").length > 0) {
                            jQuery("#ctl01").append(script);
                        }
                        else if (jQuery(".page").length > 0) {
                            jQuery(".page").append(script);
                        }

おそらく次のようなものを読む:

if (jQuery("body").length > 0) {
                            jQuery("body").append(script);
                        }
                        else if (jQuery("SomeOtherDivOrClass").length > 0) {
                            jQuery("SomeOtherDivOrClass").append(script);
                        }

このスクリプトが (includedScripts.txt ファイルと連携して) 行うことは、ページに基づいてロードする別のスクリプトを指定できるようにすることです。もちろん、これは、すべてのページに読み込まれる単一のスクリプトがあることを前提としています。次に例を示します。

<script type="text/javascript"> src="Scripts/customeJQuery.js"></script>

これには上記のコードが含まれます (追加スクリプトの読み込み)。

これは私にとってはうまくいきます。微調整を行う必要があります。うまくいったら教えてください。

于 2013-01-11T14:23:58.480 に答える