(Portal 開發讀書筆記)AjaxPortlet

 如下是開發 AjaxPortlet的步驟:javascript

步驟1:建立一個常規的Portlet做爲AjaxPortlet的基礎。java

  
  
  
  
  1. public class DateTimePortlet extends GenericPortlet { 
  2. @RenderMode(name = "view"
  3. public void showHomePage(RenderRequest request, 
  4. RenderResponse response)throws ...{ 
  5. ... 
  6. getPortletContext().getRequestDispatcher( 
  7. response.encodeURL("/WEB-INF/jsp/home.jsp")) 
  8. .include(request, response); 

 

步驟2:在jsp頁面中,使用瀏覽器的XMLHttpRequest對象來發送請求和接受響應。ajax

  
  
  
  
  1. <%@include file="include.jsp"%> 
  2. <script type='text/javascript'> 
  3. function <portlet:namespace/>setCurrentDateTime() { 
  4. var xhr = new XMLHttpRequest(); 
  5. ... 
  6. var url = 
  7. "<%=request.getContextPath()%>/DateTimeServlet" 
  8. xhr.open("GET", url, true); 
  9. xhr.send(); 
  10. </script> 
  11. <table> 
  12. <tr> 
  13. <td><b><a href="#" 
  14. onclick="<portlet:namespace/>setCurrentDateTime();" 
  15. style="color: black;">Refresh</a></b></td> 
  16. </tr> 
  17. </table> 
  18. <br/> 
  19. <!--如下的div容器用於顯示當前的日期和時間,其中的數據是ajax返回拿到的-->
  20. <div id="<portlet:namespace/>messageText"> 
  21. </div> 

咱們這裏能夠看到,咱們定義了一個js方法,叫setCurrentDateTime()做爲點擊頁面上Refresh超連接的事件處理函數,在這個方法裏面,咱們建立了瀏覽器的XHR對象,而後讓它打開一個指向DateTimeServlet的鏈接,用Http GET 訪問,而且是個異步鏈接(true參數),最後讓XHR發送這個請求,而且馬上就返回。瀏覽器

 

步驟3:在服務端定義Servlet來處理XHR發過去的請求,由於步驟2中XMLHttpRequset發過去的是GET請求,因此對應的,這裏必須定義doGet的實現:app

  
  
  
  
  1. public class DateTimeServlet extends HttpServlet { 
  2. public void doGet(HttpServletRequest request, 
  3. HttpServletResponse response) ... { 
  4. SimpleDateFormat sdf = 
  5. new SimpleDateFormat("dd-MMM-yyyy hh:mm:ss a"); 
  6. OutputStream outStream = response.getOutputStream(); 
  7. StringBuffer buffer = new StringBuffer(); 
  8. buffer.append("Hello World (<i> " 
  9. + sdf.format(new Date()) + " </i>)"); 
  10. outStream.write(buffer.toString().getBytes()); 

它先建立一個DateFormat,而後打開一個HttpServletResponse輸出流,而且將格式化的日期和其餘字符串以HTML Fragment的形式寫入到輸出流中。異步

 

步驟4:在頁面上定義一個js函數用於響應Servlet返回的結果,而後渲染到指定<div>中jsp

  
  
  
  
  1. <script type='text/javascript'> 
  2. function <portlet:namespace/>setCurrentDateTime() { 
  3. var xhr = new XMLHttpRequest(); 
  4. xhr.onreadystatechange = function() { 
  5. //readyState爲4代表XMLHttpRequest的狀態爲Complete,也就是響應Data能夠拿到了
  6. if(xhr.readyState == 4) { 
  7. var messageText = document.getElementById("<portlet:namespace/>messageText"); 
  8. messageText.innerHTML = xhr.responseText; 
  9. }; 
  10. var url = 
  11. "<%=request.getContextPath()%>/DateTimeServlet"
  12. xhr.open("GET", url, true); 
  13. xhr.send(); 
  14. </script>
相關文章
相關標籤/搜索