熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

Portlet開發入門實例

2013-11-23 19:05:04  來源: Java核心技術 

  原生Portlet開發

  這是最簡單最本質的開發方式直接基於Portlet規范定義的接口開發Portlet優點是貼近底層比較靈活

  缺點當然就是所有事情都要自己去做就好比不用SpringMVCStruts直接基於Servlet開發一樣

  這種方式比較適合自己開發Portlet框架

  public class NativePortlet implements Portlet {

  private Logger logger = LoggerFactorygetLogger(NativePortletclass);

  private PortletConfig config;

  @Override

  public void init(PortletConfig portletConfig) throws PortletException {

  (初始化Portlet);

  nfig = portletConfig;

  }

  @Override

  public void processAction(ActionRequest actionRequest ActionResponse actionResponse) throws PortletException IOException {

  (處理Action動作);

  (接收到POST請求用戶名為[{}] actionRequestgetParameter(userName));

  }

  @Override

  public void render(RenderRequest renderRequest RenderResponse renderResponse) throws PortletException IOException {

  (處理Render動作);

  WindowState state = renderRequestgetWindowState();

  if (stateequals(WindowStateMINIMIZED)) {

  return;

  }

  // doDispatch();

  PortletMode mode = renderRequestgetPortletMode();

  if (PortletModeVIEWequals(mode)) {

  // doView();

  String normalPage = configgetInitParameter(ViewPage);

  if (WindowStateNORMALequals(state)) {

  thisinclude(renderRequest renderResponse normalPage);

  } else {

  thisinclude(renderRequest renderResponse );

  }

  } else if (PortletModeEDITequals(mode)) {

  // doEdit();

  } else if (PortletModeHELPequals(mode)) {

  // doHelp();

  } else {

  throw new PortletException(unknown portlet mode: + mode);

  }

  }

  @Override

  public void destroy() {

  (銷毀Portlet);

  }

  private void include(RenderRequest request RenderResponse response String viewPage) throws PortletException IOException {

  responsesetContentType(text/html);

  PortletContext context = configgetPortletContext();

  PortletRequestDispatcher requestDispatcher = contextgetRequestDispatcher(viewPage);

  requestDispatcherinclude(request response);

  }

  }

  可以看到在render()方法中我們要自己處理不同Portlet模式(ViewEditHelp等)的渲染根據需要做分發

  諸如此類的各種細節都需要我們自己去制定規則自己處理

  注解Portlet開發

  Portlet規范也提供了注解的方式來開發Portlet這樣不用依賴SpringMVC Portlet等第三方框架

  也能比較方便的開發Portlet又不用處理特別底層的實現細節來看一個例子

  public class AnnotatedPortlet extends GenericPortlet {

  private Logger logger = LoggerFactorygetLogger(AnnotatedPortletclass);

  /**

  * 進入主頁面(View模式)

  * @param request

  * @param response

  * @throws Exception

  */

  @RenderMode(name = view)

  public void toIndexPage(RenderRequest request RenderResponse response) throws Exception {

  getPortletContext()

  getRequestDispatcher(getInitParameter(ViewPage))

  include(request response);

  }

  /**

  * 保存用戶名

  * @param request

  * @param response

  */

  @ProcessAction(name = saveUsername)

  public void saveUsername(ActionRequest request ActionResponse response) {

  String userName = requestgetParameter(userName);

  (保存用戶名[{}] userName);

  }

  /**

  * 保存電子郵件地址

  * @param request

  * @param response

  */

  @ProcessAction(name = saveEmail)

  public void saveEmail(ActionRequest request ActionResponse response) {

  String email = requestgetParameter(email);

  (保存Email[{}] email);

  }

  }

  使用@RenderMode注解定義不同模式下Portlet渲染的實現方法@ProcessAction注解可以根據動作名稱

  直接將請求交給標有注解的方法去處理不用我們自己去實現根據注解分發請求的代碼了

  附其他代碼
    頁面代碼如下使用Portlet規范中定義的標簽產生ActionUrl
    <%@ page language=java contentType=text/html; charset=UTF
    pageEncoding=UTF%>
    <%@ taglib uri=_rt prefix=c%>
    <%@ taglib uri= prefix=fmt%>
    <%@ taglib uri= prefix=fn%>
    <%@ taglib uri=__ prefix=portlet%>
    <portlet:defineObjects />
    <h>這是一個演示FORM表單和AJAX提交的示例程序</h>
    <! FORM表單提交實例 >
    <form action=<portlet:actionURL name=saveUsername/> method=POST>
    <tr>
    <td>用戶名</td>
    <td><input name=userName type=text /></td>
    </tr>
    <tr>
    <td><input type=submit value=表單提交 /></td>
    </tr>
    </form>
    <! AJAX提交實例 ><tr>
    <td>Email:</td>
    <td><input id=email type=text/></td></tr><tr>
    <input id=ajaxBtn type=button value=AJAX提交 /></tr><script>
    $(ajaxBtnbind(click function () {
    var email = $(emailvalueOf()
    jQueryajax({
    type: GET
    async: true
    url: <portlet:actionURL name=saveEmail />
    dataType: json
    data: {
    email: email
    }
    success: function (data) {
    alert(data)
    }
    error: function (data status e) {
    alert(e)
    }
    beforeSend: function () {
    }
    complete: function () {
    }
    })
    })
    </script>


From:http://tw.wingwit.com/Article/program/Java/hx/201311/26248.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.