Board logo

标题: DWR 简化 Ajax 的 portlet 间通信(2) [打印本页]

作者: look_w    时间: 2018-7-20 08:16     标题: DWR 简化 Ajax 的 portlet 间通信(2)

javaScriptFunctions.jspjavaScriptFunctions.jsp 导入了来自 DWR 的 JavaScript 库(engine.js)并动态地创建库 MessagingBean.js。注意,MessagingBean.js 使用的名称与 dwr.xml()中的 JavaBean 的名称相同;实际上,DWR 生成 MessagingBean.js。DWR 框架使用 engine.js 库;作为开发人员,通常不需要考虑直接使用它。
如清单 5 所示,sendOrderNr()函数调用 中定义的 MessagingBean函数。DWR 自动把 HttpSession添加到方法调用。JavaScript 函数中的最后一个参数是 callback函数。在稍后创建的 portlet JSP 中,包含这个 JSP。
清单 5. javaScriptFunctions.jsp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<%@ 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>




创建 portlet现在有了后端和代理函数,可以开发 portlet 本身了。所有三个 portlet 都使用相同的代码基;惟一的区别是每个 portlet 使用的 JSP 的名称。
使用清单 6 中的代码创建一个新 portlet,并给它起名为 Orders:

清单 6. Orders.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package interportletmessagingusingajax;

import java.io.*;

import javax.portlet.*;

public class Orders extends GenericPortlet {

// JSP folder name
public static final String JSP_FOLDER = "/interportletmessagingusingajax/jsp/";

// JSP file name to be rendered on the view mode
public static final String VIEW_JSP = "OrdersView";         


public void init(PortletConfig config) throws PortletException{
   super.init(config);
}

public void doView(RenderRequest request, RenderResponse response)
   throws PortletException, IOException {
   // Set the MIME type for the render response
   response.setContentType(request.getResponseContentType());

   // Invoke the JSP to render
   PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(
     getJspFilePath(request, VIEW_JSP));
   rd.include(request,response);

   //this is workaround for portletsession sharing between
   //servlets and portlets
   //see http://weblogs.java.net/blog/who ... ession_session.html
   //and http://mail-archives.apache.org/ ... ev/200502.mbox/%3Ca
   //2519328f3ba1d1eddfc33c924b6805d@umich.edu%3E
   //
   PortletRequestDispatcher rd2 = getPortletContext().getRequestDispatcher("/dwr/");
   rd2.include(request, response);

}

private static String getJspFilePath(RenderRequest request, String jspFile) {
   String markup = request.getProperty("wps.markup");
   if( markup == null )
     markup = getMarkup(request.getResponseContentType());
   return JSP_FOLDER+markup+"/"+jspFile+"."+getJspExtension(markup);
}
   
private static String getMarkup(String contentType) {
   if( "text/vnd.wap.wml".equals(contentType) )
     return "wml";
   return "html";
}

private static String getJspExtension(String markupName) {
   return "jsp";
}
}






欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0