(Portal開発読書ノート)AjaxPortlet
9589 ワード
AjaxPortletを開発するには、次の手順に従います.
手順1:AjaxPortletのベースとして通常のPortletを作成します.
ステップ2:jspページでは、ブラウザのXMLHttpRequestオブジェクトを使用してリクエストを送信し、応答を受信します.
ここでは,setCurrentDateTime()というjsメソッドをクリックページ上のRefreshハイパーリンクのイベント処理関数として定義し,このメソッドではブラウザのXHRオブジェクトを作成し,DateTimeServiceletへの接続を開き,Http GETでアクセスし,非同期接続(trueパラメータ)とし,最後にXHRにこの要求を送信させ,すぐに戻る.
ステップ3:サーブレットをサービス側で定義してXHRからの過去の要求を処理する.ステップ2でXMLHttpRequsetからの送信はGET要求であるため、対応する.ここでdoGetの実装を定義する必要がある.
DateFormatを作成し、HttpServeretResponse出力ストリームを開き、フォーマットされた日付と他の文字列をHTML Fragmentとして出力ストリームに書き込みます.
ステップ4:ページにjs関数を定義して、サーブレットが返す結果に応答し、指定した
手順1:AjaxPortletのベースとして通常のPortletを作成します.
- public class DateTimePortlet extends GenericPortlet {
- @RenderMode(name = "view")
- public void showHomePage(RenderRequest request,
- RenderResponse response)throws ...{
- ...
- getPortletContext().getRequestDispatcher(
- response.encodeURL("/WEB-INF/jsp/home.jsp"))
- .include(request, response);
- }
- }
ステップ2:jspページでは、ブラウザのXMLHttpRequestオブジェクトを使用してリクエストを送信し、応答を受信します.
- <%@include file="include.jsp"%>
- <script type='text/javascript'>
- function <portlet:namespace/>setCurrentDateTime() {
- var xhr = new XMLHttpRequest();
- ...
- var url =
- "<%=request.getContextPath()%>/DateTimeServlet"
- xhr.open("GET", url, true);
- xhr.send();
- }
- </script>
- <table>
- <tr>
- <td><b><a href="#"
- onclick="<portlet:namespace/>setCurrentDateTime();"
- style="color: black;">Refresh</a></b></td>
- </tr>
- </table>
- <br/>
- <!-- div , ajax -->
- <div id="<portlet:namespace/>messageText">
- </div>
ここでは,setCurrentDateTime()というjsメソッドをクリックページ上のRefreshハイパーリンクのイベント処理関数として定義し,このメソッドではブラウザのXHRオブジェクトを作成し,DateTimeServiceletへの接続を開き,Http GETでアクセスし,非同期接続(trueパラメータ)とし,最後にXHRにこの要求を送信させ,すぐに戻る.
ステップ3:サーブレットをサービス側で定義してXHRからの過去の要求を処理する.ステップ2でXMLHttpRequsetからの送信はGET要求であるため、対応する.ここでdoGetの実装を定義する必要がある.
- public class DateTimeServlet extends HttpServlet {
- public void doGet(HttpServletRequest request,
- HttpServletResponse response) ... {
- SimpleDateFormat sdf =
- new SimpleDateFormat("dd-MMM-yyyy hh:mm:ss a");
- OutputStream outStream = response.getOutputStream();
- StringBuffer buffer = new StringBuffer();
- buffer.append("Hello World (<i> "
- + sdf.format(new Date()) + " </i>)");
- outStream.write(buffer.toString().getBytes());
- }
- }
DateFormatを作成し、HttpServeretResponse出力ストリームを開き、フォーマットされた日付と他の文字列をHTML Fragmentとして出力ストリームに書き込みます.
ステップ4:ページにjs関数を定義して、サーブレットが返す結果に応答し、指定した
にレンダリングします.
- <script type='text/javascript'>
- function <portlet:namespace/>setCurrentDateTime() {
- var xhr = new XMLHttpRequest();
- xhr.onreadystatechange = function() {
- //readyState 4 XMLHttpRequest Complete, Data
- if(xhr.readyState == 4) {
- var messageText = document.getElementById("<portlet:namespace/>messageText");
- messageText.innerHTML = xhr.responseText;
- }
- };
- var url =
- "<%=request.getContextPath()%>/DateTimeServlet";
- xhr.open("GET", url, true);
- xhr.send();
- }
- </script>