引言
许多门户开发人员已使用 WebSphere Portal 创建用于共享事件和数据以增强用户体验的协作 Portlet。例如,在一个 Portlet 中提交的选择可导致更新的信息在多个相关的 Portlet 中显示,从而有助于这些 Portlet 在其表示中保持同步。此功能在服务器上实现,依赖于 Portlet 将操作请求提交到服务器,以使该服务器可以在页面被刷新之前执行数据传输。
然而,当您将 Ajax 功能添加到 Portlet 时,此方法就变得无人问津了,因为 Ajax 功能使您可以动态更新由 Portlet 显示的数据,而不用提交操作请求或刷新页面。本文将说明如何使用 Dojo JavaScript 工具包在浏览器中共享 Portlet 之间的数据和事件,该工具包可为动态更新的 Portlet 提供协作支持。
什么是 Dojo?
Dojo 是开源 JavaScript 工具包,可用于开发动态 Web 应用程序。Dojo 的许多库中都包含 Ajax 支持、DOM 操作工具、事件处理系统和可自定义的小部件集。Dojo 将这些库与一个灵活的打包系统组合在一起,这样,您就可以只导入所需的库;Dojo 自动地为您解决了所有库与库之间的依赖关系。
使用 Dojo
动态打包系统正是使用 Dojo 库与使用传统 JavaScript 包含的区别所在。执行两个步骤就可以包括 Dojo 库。您将执行以下两个步骤:
包括 Dojo 引导。<script type="text/javascript" src="/path/to/dojo/dojo.js">
</script>
标识您的应用程序所需要的 Dojo 库。您使用 dojo.require 语句来包括 Dojo 小部件的管理功能 (dojo.widget.*) 和 Button 小部件 (dojo.widget.Button)。
<script type="text/javascript">
dojo.require("dojo.widget.*");
dojo.require("dojo.widget.Button");
</script>
dojo.require 语句可指定您将要在应用程序中使用的 Dojo 资源。Dojo 引导将对页面进行扫描以查找这些 dojo.require 语句,并且将动态包括对应的库以使这些资源可供使用。动态加载进程还处理 Dojo 库之间的所有依赖关系,因此,您只需针对所使用的资源直接添加 require 语句。
结合使用 Dojo 和 WebSphere Portal
Dojo 的独特加载策略为 Portlet 开发人员出了一道难题。Dojo 引导 dojo.js 只应在 HTML 页面中包括一次。取决于浏览器类型,如果包括 dojo.js 两次或两次以上,则会导致 JavaScript 错误并向最终用户报告这些错误。在 WebSphere Portal 中避免出现该问题的最简单的方式是:在您的主题的 JSP 中包括 dojo.js,然后根据需要在您的主题和 Portlet JSP 中放置 dojo.require 语句。
然而,我希望读者在学习了示例应用程序后,能够在不需要修改其主题的情况下部署 Portlet。因此,我已在 Portlet 项目中包括 Dojo 库,并且用 JavaScript 编写了条件加载器。
条件加载器包含在 dojoLoader.jsp 文件中:
<script type="text/javascript"> var path = "<%=request.getContextPath() %>/dojo/dojo.js"; if(typeof dojo=="undefined") { document.write('<S'); document.write('CRIPT type=\"text/javascript\" src=\"'); document.write(path); document.write('\" ><\/S'); document.write('CRIPT>'); } </script>
此代码检查 dojo JavaScript 对象是否存在,如果未定义该对象,此代码将插入脚本,以便将 dojo.js 包括在当前 HTML 文档中。用于执行此操作的 JavaScript 代码不太好理解,因此,必须对字符串形式的 <script> 或 </script> 的所有实例进行拆分;否则,某些浏览器会尝试将其解析为脚本的实际的起始及结束语句。而采用修改主题 JSP 这一解决方案就会简单很多。因此,请只在无法修改主题 JSP 的情况下才使用此条件加载器技术。
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索javascript
, dojo
, require
, 语句
, js动态添加刷新
, portlet
, javascript动态库
, require同步加载
js动态添加事件
portal portlet、portal和portlet、websphere portal、ibm websphere portal、websphere portal教程,以便于您获取更多的相关知识。