使用dojo上传器到servlet的错误

时间:2014-06-11 19:22:11

标签: javascript html servlets dojo uploader

我尝试上传文件并使用post方法将其发送到java servlet。我的道场是1.8。刚刚开始使用javascript,仍然需要学习。如果可以,请纠正我。所以我有几个未定义的属性:label,UploaderID和dojo源路径应该是真的!

   **************** REVISED CODE ***************************

<!DOCTYPE HTML>
<html>
<head>
    <meta charset="utf-8">
    <title>dojox.form.Uploader</title>

    <link href="dijit/themes/dijit.css" rel="stylesheet" />
    <link href="dijit/themes/claro/Common.css" rel="stylesheet" />
    <link href="dijit/themes/claro/form/Common.css" rel="stylesheet" />
    <link href="dijit/themes/claro/form/Button.css" rel="stylesheet" />
    <link href="dojox/form/resources/UploaderFileList.css" rel="stylesheet" />

     <script type="text/javascript" 
      src="//ajax.googleapis.com/ajax/libs/dojo/1.8/dojo/dojo.js" 
     data-dojo-config="parseOnLoad: true, async: true, 
                                         isDebug: true, 
                                         packages: [{name: 'dojo', location: '.'},
                                                    {name: 'dijit', location: 
                                                     '/dojo/dijit'},
                                                    {name: 'dojox', location:
                                                       '/dojo/dojox'},
                                                     ]"></script>

    <script> 
      dojo.require("dojo.domReady")
dojo.require("dijit.form.Button");
dojo.require("dijit.Dialog");
dojo.require("dijit.form.TextBox");   
dojo.require("dojox.form.Uploader");
dojo.require("dojox.form.uploader.FileList");
dojo.require("dojo.parser");
});
    </script> 
</head>
<body class="claro">
    <form method="post" action="user" id="myForm" enctype="multipart/form-data" >
        <fieldset style="background-color:lightblue;">

            <h1 id="greeting">User Administration</h1>

    <p>First Name: <input type="text" name="fname" size="20"> 

            LastName: <input type="text" name="lname" size="20"></p>    

            <input class="browseButton" name="uploadedfile" multiple="false"   
            type="file" data-dojo-type="dojox.form.Uploader" label="Select Some File"
           id="uploader" />

           <p><input type="submit" label="Submit" data-dojo-type="dijit.form.Button" />
            </p>

           <div id="files" data-dojo-type="dojox.form.uploader.FileList"
            uploaderId="uploader"></div>
        </fieldset>
    </form>                     
</body>
</html>

2 个答案:

答案 0 :(得分:0)

我在这里注意到几个错误:

<script>中的第一行:

dojo.required("dojo.domready")

dojo.required()不存在,应为dojo.require()

除此之外,dojo.domready甚至不是一个模块,应该是dojo.domReady


以下代码是错误的:

function(parser){
    parser.parse();
});

您可能从使用AMD的代码示例中复制粘贴它,但是,您不再使用AMD(但dojo.require()),因此此代码甚至无法编译。

但是,您正在使用parseOnLoad机制,因此实际上您不需要自己解析页面(这甚至会导致错误,因为您要解析相同的小部件两次)。

删除代码的那部分,只需要使解析加载机制起作用:

dojo.require("dojo.parser");

这段代码看起来有些尝试将AMD示例转换为非AMD代码失败,另一件事你做错了:

dojo.require("dijit.form/Button");

在使用AMD之前的代码(dijit.form.Button)时,您应该使用点符号。 Dojo可能会理解这一点,至少它会在最近的Dojo版本中,但我怀疑这将在旧版本的Dojo中有效。


您要按换行符拆分属性名称,例如:

<input class="browseButton" name="uploadedfile" multiple="false" type="file" data-
    dojo-type="dojox.form.Uploader"
    label="Select Some File" id="uploader" />

属性名称data-dojo-type应该是1行,如果将该属性拆分为多行,我认为它无效。


在加载页面时解析页面的Dojo配置属性是parseOnLoad(不是ParseOnLoad)。我不确定Dojo是否处理这些属性不区分大小写,但通常JavaScript属性区分大小写。

但是,您已经在加载Dojo的data-dojo-config标记上使用<script>属性,因此您实际上甚至不需要它。


如果您修复了所有这些错误,您的脚本应该可以正常工作(有或没有AMD),正如您在这个小提琴中看到的那样:http://jsfiddle.net/e65EY/

答案 1 :(得分:-1)

是否正确设置了dojo.js?你是如何使用你的申请的?您是否已在计算机中或使用某个远程服务器下载了dojo源文件。 您可以使用google CDN,如下所示。还要查看设置你的道场来源的here

src="//ajax.googleapis.com/ajax/libs/dojo/1.8/dojo/dojo.js"

除了@Dmitri评论。
删除以下行。

<script> dojoConfig ={isDebug:true, ParseOnLoad: true,};</script>

因为您正在重新定义下一行中的dojoConfig。数据道场-配置

<script type="text/javascript" src="dojo/dojo.js" 
        data-dojo-config="async: true,isDebug: true,parseOnLoad: true"></script>

您也可以使用新的AMD格式进行require()调用,如下所示。

<script type="text/javascript"> 
require([
            "dojo/parser",
            "dijit/form/Button",
            "dijit/Dialog",
            "dijit/form/TextBox",
            "dojox/form/Uploader",
            "dojox/form/uploader/FileList"
            "dojo/domReady!"
], function (parser, Button, Dialog, TextBox, Uploader, FileList ) {
// now parse the page for widgets
            parser.parse();
// Your code will go here
});
</script>