在带有 DOJO 插件的 Struts2 应用程序中使用 dijit 小部件有啥特殊要求吗?

Posted

技术标签:

【中文标题】在带有 DOJO 插件的 Struts2 应用程序中使用 dijit 小部件有啥特殊要求吗?【英文标题】:Is there something special required to use dijit widgets within a Struts2 application with the DOJO plugin?在带有 DOJO 插件的 Struts2 应用程序中使用 dijit 小部件有什么特殊要求吗? 【发布时间】:2010-02-15 18:35:14 【问题描述】:

我正在制作一个网页原型并实现它。该原型大量使用 DOJO 来处理一些花哨的 UI 元素。该应用程序是使用启用了 DOJO 插件的 Struts 2.1.8.1 构建的。我可以在 struts 中使用特定于 dojo 的标签,但我无法让任何 dijit 小部件工作。

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>

<html xmlns="\&quot;http://www.w3.org/1999/xhtml\&quot;" xml:lang="\&quot;en\&quot;" lang="\&quot;en\&quot;">

<head>
    <sx:head parseContent="true" />
    <script type="text/javascript"> 
dojo.require("dijit.Dialog");
dojo.require("dijit.form.Button");
dojo.require("dijit.form.TextBox");
dojo.require("dijit.form.DateTextBox");
dojo.require("dijit.form.TimeTextBox");
dojo.require("dijit.form.Slider");
dojo.require("dijit.Menu");
       dojo.require("dijit.layout.AccordionContainer");    
       dojo.require("dojox.charting.Chart2D");
       dojo.require("dojox.charting.themes.PlotKit.blue");
       dojo.require("dojox.charting.themes.PlotKit.orange");
dojo.require("dijit.layout.ContentPane");
dojo.require("dijit.layout.SplitContainer");
dojo.require("dijit.form.DateTextBox");
dojo.require("dijit.Tooltip");
   </script>

我得到的错误是:

GET http://localhost:9080/quickstart/struts/dijit/Dialog.js
GET http://localhost:9080/quickstart/struts/dijit/Dialog.js 
404 Not Found

struts_dojo.js (line 769)
GET http://localhost:9080/quickstart/struts/dijit.js
GET http://localhost:9080/quickstart/struts/dijit.js
404 Not Found

struts_dojo.js (line 769)
ParamsHeadersPostPutResponseCacheHTML
Error 404: Error reported: 404

GET http://localhost:9080/quickstart/struts/dojo/__package__.js
GET http://localhost:9080/quickstart/struts/dojo/__package__.js
404 Not Found

struts_dojo.js (line 769)
ParamsHeadersPostPutResponseCacheHTML
Error 404: Error reported: 404

Could not load 'dijit.Dialog'; last tried '__package__.js'
[Break on this error] throw _13||Error(_12); 

我是否需要对 Dojo 进行特殊构建才能访问这些 dijit 小部件?

【问题讨论】:

【参考方案1】:

答案是因为 struts,以及我撰写本文时的最新版本 Struts 2.1.8.1,包括 DOJO 0.4。 Dijit 似乎是在 Dojo 1.0 之后的某个时候引入的。 (当前版本是 1.4)。

与 Struts 一起使用的小部件库是 Dojo.widget,默认情况下与 struts 一起加载。

【讨论】:

Dojo 0.4 大约 3 岁。您绝对应该尝试使用 Dijit。如果您避免 Struts 过时的 Dojo 集成,您可能可以直接包含 Dojo(但由于名称空间冲突,您不能同时使用两者) 我决定直接包含dojo,不使用任何struts ajax标签,只写我自己的javascript。

以上是关于在带有 DOJO 插件的 Struts2 应用程序中使用 dijit 小部件有啥特殊要求吗?的主要内容,如果未能解决你的问题,请参考以下文章

Struts2 插件 - Dojo 或 jQuery 还是...?

Struts2 后退按钮和链接

Dojo 插件在 Struts 2 中不起作用

struts2 和 dojo 网格

如何使用 Struts2 框架向 Dojo 树提供 JSON 数据

RequireJS 订单插件和 Dojo 1.7.1