0

基本上我有 2 个关于 javascript 和 jsp 文件的问题。第一个问题是我不能将外部 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 文件中时,一切正常。

第二个问题是关于jsp页面加载后如何初始化function;

<body onload='init()'>

这里不好,因为在 init() 中我需要引用一些在 jsp 中创建的对象...感谢您的帮助

4

1 回答 1

0

我使用 jQuery 来回答这个问题。首先,我有一个名为 includeScripts.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);
                        }

该脚本的作用(与包含的Scripts.txt 文件一起)允许您根据页面指定要加载的不同脚本。当然,这假设您在所有页面上都加载了一个单一的脚本,例如:

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

这将具有上述代码(加载附加脚本)。

这对我有用,你必须做一些调整——如果你通过了,请告诉我。

于 2013-01-11T14:23:58.480 回答