![]() ![]() ![]() ![]() JWLフレームワークでのAJAXコンポーネントの実装この記事のURLhttp://japan.internet.com/developer/20080711/26.html
著者:Aleksey Shevchenko
海外internet.com発の記事
はじめに2005年にIBMはJWL(JavaScript-based Widget Library)を導入しました。JWLは、豊富な入出力コンポーネントやナビゲーションコンポーネントを利用してJSPおよびHTMLページの機能を向上させるものです。JWLになじみがなく、詳しく知りたいという読者の方は、IBM Developer WorksのWebサイトに掲載されている下記の記事を読むと、JWLのおおよその機能を理解できるでしょう。
AJAXタグの定義(1) ―コンテンツの取得―AJAXタグは、任意のJWLパネルタグの子タグとして定義しなければいけません。AJAXタグでは、パネルの代わりとなるコンテンツを定義します。AJAXタグを含むパネルが実行されると、そのAJAXタグはサーバーリクエストを生成します。サーバーはリクエストを処理して、パネルに制御を戻します。JWLライブラリには3つのAJAXコンポーネントが用意されています。以降では、これらのコンポーネントについて詳しく説明します。 コンテンツの取得: <hx:ajaxRefreshRequest><hx:ajaxRefreshRequest>タグを使用すると、同じJSFページの親タグ内のコンテンツを非同期に置き換えることができます。置き換えるためのコンテンツはHTTP GETリクエストで取得します。このタグは、サーバーへ大量の情報を渡す必要がないとき、もしくはフォーム全体に対して少数のパラメータのみを扱いたいときに使用します。このタグの使い方を、順を追って見ていきましょう。なお、この記事の演習はすべてRAD 6.1を使って実施しています。
図1 ajaxRefreshRequestExample.jspの新規作成 ![]() 図2 [Palette]ペインの画面 ![]() リスト1 Inputコンポーネントのソースコード
<f:view>
<body>
<hx:scriptCollector id="scriptCollector1">
<h:form id="form1" styleClass="form">
<h:inputText id="text"
styleClass="inputText">
</h:inputText>
</h:form>
</hx:scriptCollector>
</body>
</f:view>
図3 OutputTextコンポーネントのプロパティ ![]() 図4 AJAXのプロパティ ![]() 図5 ajaxRefreshRequestのプロパティ ![]() リスト2 [Submit]ボタンのビヘイビアのソースコード
<hx:behavior event="onclick"
behaviorAction="get"
targetAction="group1" />
図6 Websphere 6.1サーバー上でサンプルを実行 ![]() 図7 ajaxRefreshRequestサンプルの出力 ![]() リスト3 ajaxRefreshRequestサンプルの全ソースコード
<f:view>
<body>
<hx:scriptCollector id="scriptCollector1">
<h:form id="form1" styleClass="form">
<h:inputText id="text1"
styleClass="inputText">
</h:inputText>
<hx:commandExButton type="submit"
value="Submit"
id="button1"
styleClass="commandExButton">
<hx:behavior event="onclick"
behaviorAction="get"
targetAction="group1">
</hx:behavior>
</hx:commandExButton>
<h:panelGroup id="group1" styleClass="panelGroup">
<h:outputText id="text2" styleClass="outputText"
value="#{param.text1}">
</h:outputText>
</h:panelGroup>
<hx:ajaxRefreshRequest id="ajaxRefreshRequest1"
target="group1" params="text1">
</hx:ajaxRefreshRequest>
</h:form>
</hx:scriptCollector>
</body>
</f:view>
AJAXタグの定義(2) ―コンテンツの更新―コンテンツの更新: <hx:ajaxRefreshSubmit><hx:ajaxRefreshSubmit>タグを使用すると、同じJSFページの親タグ内のコンテンツを非同期に置き換えることができます。置き換えるためのコンテンツはHTTP POSTリクエストで取得します。このタグはフォーム全体をサーバーへ送信したいときに使用します。このタグの使い方を、順を追って見ていきましょう。
図8 新規JSFページの作成 ![]() 図9 [Palette]ペイン ![]() リスト4 3つの入力テキストフィールドのコード
<hx:scriptCollector id="scriptCollector1">
<h:form id="form1" styleClass="form">
<h:inputText id="text1"
styleClass="inputText">
</h:inputText>
<h:inputText id="text2"
styleClass="inputText">
</h:inputText>
<h:inputText id="text3"
styleClass="inputText">
</h:inputText>
</h:form>
</hx:scriptCollector>
図10 AJAXのプロパティ ![]() リスト5 [Submit]ボタンのビヘイビアのコード
<hx:behavior event="onclick"
behaviorAction="get"
targetAction="group1" />
図11 新規^^Java^^クラスThreeStringsConcatenatorBean.javaの作成 ![]() リスト6 getConcatenateThreeFields()メソッドの実装
public String getConcatenateThreeFields() { return text1 + text2 + text3; } 図12 新規Faces Managed Beanの作成 ![]() 図13 新規Faces Managed Beanの登録 ![]() 図14 Bean内のフィールドをページ上のInputフィールドに対応付け ![]() 図15 サーバー上でサンプルを実行 ![]() 図16 ajaxRefreshSubmitサンプルの出力結果 ![]() リスト7 ajaxRefreshSubmitの全ソースコード
<f:view>
<body>
<hx:scriptCollector id="scriptCollector1">
<h:form id="form1" styleClass="form">
<h:inputText id="text1"
styleClass="inputText"
value="#{concatenatorBean.text1}">
</h:inputText>
<h:inputText id="text2"
styleClass="inputText"
value="#{concatenatorBean.text2}">
</h:inputText>
<h:inputText id="text3"
styleClass="inputText"
value="#{concatenatorBean.text3}">
</h:inputText>
<hx:commandExButton type="button"
value="Submit"
id="button1"
styleClass="commandExButton">
<hx:behavior behaviorAction="get;stop"
event="onclick"
targetAction>="group1" >
</hx:behavior>
</hx:commandExButton>
<h:panelGroup id="group1" styleClass="panelGroup">
<h:outputText id="text4"
styleClass="outputText"
value="#{concatenatorBean.
concatenateThreeFields}">
</h:outputText>
</h:panelGroup>
<hx:ajaxRefreshSubmit id="ajaxRefreshSubmit1"
target="group1" >
</hx:ajaxRefreshSubmit>
</h:form>
</hx:scriptCollector>
</body>
</f:view>
AJAXタグの定義(3) ―外部コンテンツの取得―外部コンテンツの取得: <hx:ajaxExternalRequest><hx:ajaxExternalRequest>では、親タグのコンテンツを別のページのコンテンツで置き換える方法を定義します。置き換えるためのコンテンツはHTTPGETメソッドで取得します。このタグは1つのJSPを他のJSPのコンテンツに組み込みたいときに役に立ちます。このタグの使い方を、順を追って見ていきましょう。
図17 ajaxExternalRequestExample.jspページの新規作成 ![]() 図18 [Palette]ペインの画面 ![]() 図19 AJAXプロパティの画面 ![]() 図20 AjaxExternalRequestのプロパティ ![]() 図21 AjaxExternalRequestサンプルの出力結果 ![]() リスト8 AjaxExternalRequestの全ソースコード
<f:view>
<body>
<hx:scriptCollector id="scriptCollector1">
<h:form id="form1" styleClass="form">
<hx:commandExButton type="submit"
value="Submit"
id="button1"
styleClass="commandExButton">
<hx:behavior event="onclick"
behaviorAction="get;stop"
targetAction="group1">
</hx:behavior>
</hx:commandExButton>
<h:panelGroup id="group1" styleClass="panelGroup">
<h:outputText id="text2"
styleClass="outputText"
value="External Page will be loaded here!">
</h:outputText>
</h:panelGroup>
<hx:ajaxExternalRequest id="ajaxExternalRequest1"
target="group1"
href="externalPage.faces"
source="group1">
</hx:ajaxExternalRequest>
</h:form>
</hx:scriptCollector>
</body>
</f:view>
参考AJAXのコンポーネント(WebSphere Information Center)著者紹介Aleksey Shevchenko(Aleksey Shevchenko)
オブジェクト指向言語に関わる仕事に8年間従事。過去4年間は、技術リーダー、プロジェクトマネージャを務める。金融、メーカー、出版の各業界にエンタープライズITソリューションを提供。
japan.internet.comのウエブサイトの内容は全て、国際法、日本国内法の定める著作権法並びに商標法の規定によって保護されており、その知的財産権、著作権、商標の所有者はインターネットコム株式会社、インターネットコム株式会社の関連会社または第三者にあたる権利者となっています。
本サイトの全てのコンテンツ、テキスト、グラフィック、写真、表、グラフ、音声、動画などに関して、その一部または全部を、japan.internet.comの許諾なしに、変更、複製、再出版、アップロード、掲示、転送、配布、さらには、社内LAN、メーリングリストなどにおいて共有することはできません。 ただし、コンテンツの著作権又は所有権情報を変更あるいは削除せず、利用者自身の個人的かつ非商業的な利用目的に限ってのみ、本サイトのコンテンツをプリント、ダウンロードすることは認められています。 |