在BEA WebLogic Portal 8.1中进行Ajax编程 第2部分

编辑注:本文讲述了在WebLogic Portal 8.1中进行底层Ajax编程的细节。这与当前的WebLogic Portal 9.2 beta版无关。

摘要

Ajax是一种异步编程范型,借助于它,开发人员可以创建高度交互式的Web站点,从而在提高用户效率的同时减轻服务器的负载。Ajax结合了Web services、JavaScript和动态HTML编程技术,可以创造丰富的客户端体验,并提高本地应用程序的可用性。本系列文章的第一篇介绍了这些相关概念以及在BEA WebLogic Portal中实现一个Ajax解决方案所涉及的架构考虑事项。

本文是此系列文章的最后一篇,提供了一组复杂的示例portlet,从一些基本的查找portlet开始,再到一个使用动态表作为前端数据库表的高级例子,最后以一个有趣的例子结尾,最后这个例子在没有使用<object>或<iframe>标签的情况下把一些页面动态嵌入到另一个页面中。

所有例子均给出了完整的源代码,并包括安装脚本和文档。

关于示例Portlet

本文在这里给出了各种支持Ajax的portlet,并逐行对其源代码(在本文的下载部分中可以找到)进行了解释。本文还包括了一个可重用Java servlet的源代码,这个servlet可用于降低Mozilla Firefox和Microsoft Internet Explorer (IE)中固有的安全限制级别。这个servlet实现了第1部分中描述的代理设计模式。

有一点需要指出,我在代码中使用了最简单的Ajax库,因为我想说明整个过程到底是怎么回事。还有大量可用的库可以极大地减少需要编写的代码量。我在一些代码中使用了Sarissa库,主要用于处理一些跨浏览器的问题。参见Ajax简介,可以了解有关Ajax库的更多信息,比如DWR。当设计和构建自己的生产应用程序时,我不建议您使用这里给出的底层构件。本文中使用的Ajax库可以很好地处理跨浏览器的问题和Ajax绑定(wiring)。

本文的余下部分逐个描述了每个示例portlet。我们鼓励您浏览源代码,从而更深入地了解这些portlet是如何实现的。

Zip Code Lookup

Zip Code Lookup(区号查找)portlet说明了两个可用于调用远程Web服务(例如,一个与Web服务器位于不同计算机上的Web服务)的方法。这两个方法(direct和proxy)是通过使用两个直接命名的按钮Direct和Proxy来调用的。Direct方法直接从Web浏览器调用Web服务,这通常会导致违反Internet Explorer中的安全规则,而在Firefox中则根本无法使用。Proxy方法使用了本文稍后将会描述的Java代理servlet。

图 1:调用远程Web服务的Zip Code Lookup portlet

注意Zip Code标签旁边的输入栏。我们在这一栏中获得输入值,然后把它传递给后端的Web服务。当我们从该Web服务获得城市和州的信息时,就会把这些信息放在City和State标签右边的相应位置上。

为了能够引用JavaScript代码中的元素,我们需要为每个元素指定一个惟一的ID。下面给出了zipcode.jsp的相关HTML代码:

<body style="font-family:helvetica;font-size:10pt;">
 <p>Type in a 5-digit zip code to get information on that zip code.</p>
 <form name="zipcode" method="post" action="">
  <table cellspacing="0" cellpadding="4" frame="box" bordercolor="#dcdcdc" rules="none" style="border-collapse: collapse;">
   <tr>
    <td>Zip Code</td>
    <td><input type="text" size="5" name="zipcode_USZip" id="zipcode_USZip"></td>
    <td><input type="button" onclick="zipcode_updateDirect();" value="Direct"/></td>
    <td><input type="button" onclick="zipcode_updateProxy();" value="Proxy"/></td>
   </tr>
  </table>
 </form>
 <hr color="blue"/>
 <table>
  <tr>
   <td>City</td>
   <td><div id="zipcode_city" style="color:blue;"></div></td>
  </tr>
  <tr>
   <td>State</td>
   <td><div id="zipcode_state" style="color:blue;"></div></td>
  </tr>
  <tr>
   <td colspan="2">
    <form>
      <button onclick="zipcode_showResults();">Returned XML <span id="zipcode_status" style="color:blue;"></span>
     </button>
   </form>
  </td>
</tr>
 </table>
</body>

注意,所有ID标签都使用了portlet名称作为前缀。这是一个相当好的最佳实践,您必须将其深植到您的编码风格中。为什么这很重要呢?因为当BEA WebLogic Portal呈现一个门户页面时,它会把所有的portet HTML拷贝和粘贴到一个聚合页面上。所以,如果您有两个portlet,而每个portlet都有一个ID为“mylabel”的元素,那么呈现出来的门户页面中将会有两个元素具有相同的惟一ID。当使用JavaScript/DOM函数getElementById('mylabel')时,返回的元素将会是文档中“mylabel” ID的第一个实例,而这很可能不是您所期望的结果!

还要注意使用<div>标签作为动态内容的占位符。这是一个样式选择问题,但是我发现,<div>标签具有成为任何内容的容器的巨大潜力,而<td>标签的限制就要严格得多。更多地使用CSS绝对有助于减少使用嵌入的样式标签,但这将会是留给读者的一道练习题。但是,我要指出的是,明智地使用CSS样式可以极大地减少最终要编写的JavaScript数量。记住,CSS可以用于改变一个元素的颜色、位置、可见性、透明度以及其他许多可视化特性。简单的样式交换通常可以让图形化用户界面变得更加具有交互性。在Employee Listing portlet中,当变化被提交给数据库之后,我使用了这项技术来通知用户。

在这个portlet中,我们将从文本栏中获得输入,调用一个Web服务查找与区号相关的城市和州信息,然后使用该Web服务返回的信息动态更新City 和State <div>元素。页面不会刷新——只有City和State元素会更新。

时间: 2024-11-08 17:24:34

在BEA WebLogic Portal 8.1中进行Ajax编程 第2部分的相关文章

在BEA WEBLOGIC PORTAL中进行AJAX编程 第1部分

摘要 门户应用程序非常适用于从多个源提取信息以及为包含门户Web应用程序的portlet提供应用服务.对于用户,portlet应用程序是独立的实体,类似于桌面上的窗口应用程序.如果在一个窗口应用程序中执行一项操作会导致其他所有应用程序中的内容被刷新,那又会怎么样呢?这就是当前大多数门户的情况.在一个portlet中通过页面流进行转移会导致整个Web页面被刷新,包括该页面上的其他所有portlet. 为了避免出现这种有时不希望有的行为,Web开发人员采用了所谓Ajax-风格的编程方法.Ajax即异

Weblogic Portal中实现AJAX编程之架构

ajax|web|编程|架构 摘要 门户应用程序非常适用于从多个源提取信息以及为包含门户Web应用程序的portlet提供应用服务.对于用户,portlet应用程序是独立的实体,类似于桌面上的窗口应用程序.如果在一个窗口应用程序中执行一项操作会导致其他所有应用程序中的内容被刷新,那又会怎么样呢?这就是当前大多数门户的情况.在一个portlet中通过页面流进行转移会导致整个Web页面被刷新,包括该页面上的其他所有portlet. 为了避免出现这种有时不希望有的行为,Web开发人员采用了所谓Ajax

使用WEBLOGIC PORTAL规则引擎中实现动态业务逻辑

web|动态 简介 业务应用的需求总是随着业务环境的变化趋势而不断地改变.决策很少是一成不变的,并且竞争压力要求业务逻辑的设计和实现具有灵活性,以快速地适应不断变化的需求.通常,对业务逻辑的更改必须由开发人员来完成,然后进行多次彻底的测试,而这将是一个很耗时的过程.在应用程序的修改工作完成后,需要将其重新部署到服务器,需要留出预定的停机时间,以防应用程序对用户不可用. 对于这个问题,更好的解决方案是通过应用程序之外的一组规则来实现某些业务决策.这些规则并没有被编译到应用程序中,而是在运行时读取并

WebLogic Portal性能管理

即使是经验丰富的 Java Web开发人员也会惊讶于开发门户这一如此巨大的飞跃.最终用户看到的那个简单漂亮的界面的背后是像BEA WebLogic Portal 这样的商业产品提供的强大功能和复杂性.当门户应用程序处于生产阶段时,诊断性能问题就会显得格外的困难. 本文假设您对WebLogic Portal的功能和术语已经十分熟悉. 一个公司的门户能让公司更有效地利用其技术和人力资产,而同时又能为其员工.合作伙伴和客户提供一流的Web体验.由于这个原因,门户应用程序现在对业务来说十分关键,并且要能

配置BEA WebLogic 8.1 JDBC连接

本文描述了BEA WebLogic 8.1 Server中各种与JDBC相关功能的配置.尽管我们使用了Oracle 8.1.7作为我们的示例数据库管理系统(DBMS),但是只要其他关系数据库提供通过JDBC的连接,就可以很容易地把一般性的概念转移到这些数据库上. JDBC是标准的Java API,几乎所有需要访问数据库的J2EE应用程序都直接或间接地使用了它.在BEA WebLogic 8.1中,配置JDBC连接包括创建和配置两个主要的工件--JDBC连接池和数据源.与这两个主要工件相关的是其他

水晶报表的jsp实现(开发工具:bea weblogic workshop)

js|web|水晶报表 最近为客户开发一个mis系统,java技术,b/s结构.客户要求系统的报表采用水晶报表.怎样在jsp中实现水晶报表呢?找遍了所有的资料,水晶报表的web实现倒是很多,但都讲的是微软的.net方案.jsp中如何实现水晶报表的动态显示呢?经过一段时间的痛苦摸索,现在把我的方案介绍给大家,希望各位大哥批评指正 我的问题:需要动态的显示水晶报表,并且要根据我传递的一个参数(BH)的值动态的显示数据.并且要可以把水晶报表导出为word,excel,pdf等格式 我的解决方案:一:下

weblogic的boot.properties中密码破解

问题描述 weblogic的boot.properties中密码破解1.请下载附件EncryptStr.jar(如果不用附件的话,也可以自行编译,后边我附上源码)2.将EncryptStr.jar拷贝到本地(如果要破解服务器的话,最好拷贝到服务器目录)下,我这边拷贝到c:tmp3.设置java环境变量setCLASSPATH=%CLASSPATH%;c:tmpEncryptStr.jar;C:beawlserver_10.3serverlibweblogic.jar4.执行命令:java-Dwe

解决WebLogic在Linux系统中启动关闭很慢的方法

风信网(ithov.com)原创文章:WebLogic是一个基于Javaee架构的中间件,BEA WebLogic是用于开发.集成.部署和管理大型分布式Web应用.网络应用和数据库应用的Javahttp://www.aliyun.com/zixun/aggregation/15818.html">应用服务器.将Java的动态功能和Java Enterprise标准的安全性引入大型网络应用的开发.集成.部署和管理之中. 在管理AS 5.1的过程中,发现启动关闭weblogic很慢,查找了一下

BEA WebLogic 暴露源代码漏洞

WebLogic 涉及程序: BEA WebLogic Server and Express 5.1.x/4.5x/4.0x/3.1.8 描述: BEA WebLogic 暴露源代码漏洞 详细: 受影响版本所有系统上的BEA WebLogic Enterprise 5.1.x BEA WebLogic Server and Express 5.1.x BEA WebLogic Server and Express 4.5.x BEA WebLogic Server and Express 4.0