当前所在位置:珠峰网资讯 >> 计算机 >> IT教育 >> 正文
DWR 简化 Ajax 的 portlet 间通
发布时间:2008/2/25 8:21:57 来源:xue.net 编辑:城市教育在线

创建 MockupDB 和 MessagingBean

     清单 3 所示的 MockupDB 是个单体类,模拟客户订单的数据库。所有订单都硬编码在这个类中。真实应用程序可能使用关系数据库系统,但这个示例对我们的目的来说足够了。


清单 3. MockupDB
package db;
import java.util.Hashtable;
import java.util.Map;
public class MockupDB {
  private static MockupDB instance=new MockupDB();
  private String[] orders=new String[4];
  private Map orderDetails=new Hashtable();
  private Map customerDetails=new Hashtable();
  private MockupDB()
  {
    String ordStart="ORD";
    orders[0]=ordStart+"000408015";
    orders[1]=ordStart+"001600023";
    orders[2]=ordStart+"000042000";
    orders[3]=ordStart+"011235813";
    orderDetails.put(orders[0],"1. WebSphere Everyplace Connection Manager<br/>"+
                     "2. WebSphere Portal");
    orderDetails.put(orders[1],"1. DB2 Universal Database<br/>2. DB2 Everyplace");
    orderDetails.put(orders[2],"1. Tivoli Access Manager for e-business <br/>2."+
                     "Tivoli Directory Integrator");
    orderDetails.put(orders[3],"1. IBM System z9<br/>2. IBM System p5 550 Express");
    customerDetails.put(orders[0],"<b>Systems and Technology Group</b><br/>"+
                        "Some Road<br/>Finland");
    customerDetails.put(orders[1],"<b>Global Financing</b><br/>Another Street"+
                        "<br/>Finland");
    customerDetails.put(orders[2],"<b>Software</b><br/>Yet Another Road"+
                        "<br/>Finland");
    customerDetails.put(orders[3],"<b>Global Services</b><br/>Still Another "+
                        "Street<br/>Finland");
  }
  public static MockupDB getInstance()
  {
    return instance;
  }
  public String[] getOrders()
  {
    return orders;
  }
  public String getOrderDetails(String orderNro)
  {
    return (String)orderDetails.get(orderNro);
  }
  public String getCustomerDetails(String orderNro)
  {
    return (String)customerDetails.get(orderNro);
  }
}
                  

     清单 4 所示的 MessagingBean 是个简单的 POJO,有两个方法,都接受订单号,但是分别返回订单细节和客户细节。MessagingBeanMockupDB 得到细节。


清单 4. MessagingBean
package msg;
import javax.servlet.http.HttpSession;
import db.MockupDB;
public class MessagingBean {
  public MessagingBean()
  {        
  }
  public String getOrderDetails(String orderNumber,HttpSession httpSession)
  {
    String orderDetails=MockupDB.getInstance().getOrderDetails(orderNumber)
    httpSession.setAttribute("orderDetailsOrderNumber",orderNumber);
    httpSession.setAttribute("orderDetails",orderDetails);
    return orderDetails;
  }
  public String getCustomerDetails(String orderNumber,HttpSession httpSession)
  {
    String customerDetails=MockupDB.getInstance().getCustomerDetails(orderNumber);
    httpSession.setAttribute("customerDetailsOrderNumber",orderNumber);
    httpSession.setAttribute("customerDetails",customerDetails);
    return customerDetails;
  }
}
                  

MessagingBean 还把订单细节和客户细节添加到 HttpSession

javascriptFunctions.jsp

    javascriptFunctions.jsp 导入了来自 DWR 的 javascript 库(engine.js)并动态地创建库 MessagingBean.js。注意,MessagingBean.js 使用的名称与 dwr.xml(清单 2)中的 JavaBean 的名称相同;实际上,DWR 生成 MessagingBean.js。DWR 框架使用 engine.js 库;作为开发人员,通常不需要考虑直接使用它。

    如清单 5 所示,sendOrderNr() 函数调用 清单 4 中定义的 MessagingBean 函数。DWR 自动把 HttpSession 添加到方法调用。javascript 函数中的最后一个参数是 callback 函数。在稍后创建的 portlet JSP 中,包含这个 JSP。


清单 5. javascriptFunctions.jsp
<%@ page contentType="text/html" 
import="java.util.*,javax.portlet.*,interportletmessagingusingajax.*" %>
<%@taglib uri="http://java.sun.com/portlet" prefix="portlet" %>
<portlet:defineObjects/>
<SCRIPT type="text/javascript"
 src='<%= renderResponse.encodeURL(renderRequest.getContextPath() +
 "/dwr/interface/MessagingBean.js") %>'> 
</SCRIPT>
<SCRIPT type="text/javascript"
 src='<%= renderResponse.encodeURL(renderRequest.getContextPath() + 
 "/dwr/engine.js") %>'> 
</SCRIPT>
<SCRIPT type="text/javascript">
function <portlet:namespace />sendOrderNr(orderNr)
{
document.getElementById("orderDetailsOrderNumber").innerHTML=orderNr;
document.getElementById("customerDetailsOrderNumber").innerHTML=orderNr;
MessagingBean.getOrderDetails(orderNr,<portlet:namespace />showOrderDetails);
MessagingBean.getCustomerDetails(orderNr,<portlet:namespace />showCustomerDetails);
return false;
}
function <portlet:namespace />showOrderDetails(orderDetails)
{
document.getElementById("orderDetails").innerHTML=orderDetails;
return false;
}
function <portlet:namespace />showCustomerDetails(customerDetails)
{
document.getElementById("customerDetails").innerHTML=customerDetails;
return false;
}
</SCRIPT>
        
广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved