创建 portlet
现在有了后端和代理函数,可以开发 portlet 本身了。所有三个 portlet 都使用相同的代码基;惟一的区别是每个 portlet 使用的 JSP 的名称。
- 使用清单 6 中的代码创建一个新 portlet,并给它起名为 Orders:
清单 6. Orders.java
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/wholder/archive/2005/02/session_session.html //and http://mail-archives.apache.org/mod_mbox/portals-pluto-dev/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"; }} |
- 创建并打开 OrdersView.jsp(在 interportletmessagingusingajax/jsp/html 目录),并把清单 7 中的代码添加到它:
清单 7. OrdersView.jsp
<%@ page contentType="text/html" import="java.util.*,javax.portlet.*,interportletmessagingusingajax.*" %><%@taglib uri="http://java.sun.com/portlet" prefix="portlet" %><portlet:defineObjects/><jsp:include page="javascriptFunctions.jsp" /><DIV style="margin: 6px"><H4 style="margin-bottom: 3px">Orders</H4><table cellspacing="0" cellpadding="5" border="1"><% db.MockupDB database= db.MockupDB.getInstance();String[] orders=database.getOrders();for(int i=0;i<orders.length;i++){%><tr><td><%="000000000"+String.valueOf(i+1) %></td><td><a href="" ><%=orders[i]%></a></td></tr><%} %></table></DIV> |
- 第二个 portlet 是 OrderDetailsPortlet.java。对这个 portlet 使用 清单 6 中的代码,并把
VIEW_JSP 变量的值改成 OrdersDetailsPortletView.jsp。这个 JSP 的代码如清单 8 所示:
清单 8. OrdersDetailsPortletView.jsp
<%@ page contentType="text/html" import="java.util.*,javax.portlet.*,interportletmessagingusingajax.*" %><%@taglib uri="http://java.sun.com/portlet" prefix="portlet" %><portlet:defineObjects/><DIV style="margin: 6px"><H4 style="margin-bottom: 3px">Order details</H4><table cellspacing="0" cellpadding="5" border="1"><tr><th>Order number</th><th>Order details</th></tr><tr><%String orderDetailsOrderNumber=(String)renderRequest.getPortletSession().getAttribute( "orderDetailsOrderNumber",PortletSession.APPLICATION_SCOPE);String orderDetails=(String)renderRequest.getPortletSession().getAttribute( "orderDetails",PortletSession.APPLICATION_SCOPE);if(orderDetailsOrderNumber==null){orderDetailsOrderNumber="";}if(orderDetails==null){orderDetails="";}%><td><div id="orderDetailsOrderNumber"><%=orderDetailsOrderNumber%></div></td><td><div id="orderDetails"><%=orderDetails%></div></td></tr></table></DIV> |
- 第三个 portlet 是 CustomerDetailsPortlet.java。对这个 portlet 使用 清单 6 中的代码,并把
VIEW_JSP 变量的值改成 CustomerDetailsPortletView.jsp。这个 JSP 的代码如清单 9 所示:
清单 9. CustomerDetailsPortletView.jsp
<%@ page contentType="text/html" import="java.util.*,javax.portlet.*,interportletmessagingusingajax.*" %><%@taglib uri="http://java.sun.com/portlet" prefix="portlet" %><portlet:defineObjects/><%%><DIV style="margin: 6px"><H4 style="margin-bottom: 3px">Customer details</H4><table cellspacing="0" cellpadding="5" border="1"><tr><th>Order number</th><th>Customer details</th></tr><tr><%String customerDetailsOrderNumber= (String)renderRequest.getPortletSession().getAttribute( "customerDetailsOrderNumber",PortletSession.APPLICATION_SCOPE);String customerDetails=(String)renderRequest.getPortletSession().getAttribute( "customerDetails", PortletSession.APPLICATION_SCOPE);if(customerDetailsOrderNumber==null){customerDetailsOrderNumber="";}if(customerDetails==null){customerDetails="";}%><td><div id="customerDetailsOrderNumber"><%=customerDetailsOrderNumber%></div></td><td><div id="customerDetails"><%=customerDetails%></div></td></tr></table></DIV> |
示例应用程序现在准备好了。下一步是把 portlet 打包成 WAR 文件并在 Apache Jetspeed 门户中测试它。
上一页 [1] [2] [3] [4] [5] 下一页