ビジネス・コンポーネント・データ・タグを使用した行の編集について

ユーザーが行を編集できるようにするには、一般に連携する2つのJSPページを作成します。

ビジネス・コンポーネントのInputタグの役割

HTMLフォーム要素内の<jbo:Input Xxx... />および<jbo:Row... />を含むビジネス・コンポーネント・データ・タグを使用して、JSPフォームを作成できます。このJSPフォームでユーザーは次のことを実行できます。

送信JSPページで行データを処理するには、Webサーバー・ページでレンダリングされる編集JSPに次の情報が含まれる必要があります。

更新するデータソース属性に対してタグのdataitemを設定した場合、ビジネス・コンポーネントのInputデータ・タグにより1つ目の必要項目が処理されます。ビジネス・コンポーネントのShowValueデータ・タグおよび特殊ビュー・オブジェクト属性 RowKeyを使用して値を割り当てたHTMLの非表示入力要素により、2つ目の必要項目が処理されます。ブラウザは、JSPフォーム要素から収集したこの情報を、HTTP入力パラメータとして処理用の送信JSPページにポストします。

編集JSPページおよび送信JSPページの役割

データ入力(編集)JSPページには次の情報が含まれます。

  1. アプリケーション・モジュール接続および有効なビュー・オブジェクトを指定するビジネス・コンポーネント・データ・タグ。
  2. 処理が完了するまでアプリケーション・モジュールの状態を保持するために、releasemode 属性がstatefulに設定された<jbo:ApplicationModule>データ・タグ。編集操作に推奨される状態はstatefulです。statefulモードを指定すると、ユーザーが操作を完了するまでデータソースを保持できます。
  3. 送信JSPページへのアクション参照を含むHTMLの<form>要素。

    ヒント: 行の値を送信JSPページに渡すには、HTTPのPOSTリクエストを使用することをお薦めします。このプロトコルでは、ブラウザがどのような長さのパラメータ値でも確実に渡すことができます。<form>タグから method="post"を省略した場合、ブラウザは送信JSPページのURLに追加されたパラメータ値を渡すためにHTTPのGETを使用し、 255文字を超えるURLは問題となる可能性があります。POSTリクエストを使用する場合、<form>タグは次のようになります。

    <form name="DataInput_form" method="post" action="submit.jsp">

    HTTPプロトコルで定義されたHTTPメソッドを熟知していない場合は、次のURLにあるWorld Wide Web Consortium(W3C)で詳細を参照してください。 http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.3

  4. ユーザーがデータソースの既存の行を参照できるJSPスクリプトレット・コード。編集JSPページに表示されるのが1行であるか複数の行であるかにかかわらず、JSP相互作用ではユーザーが一度に1行を編集および送信する必要があります。
  5. データソースに含まれる特定の属性の現在値をレンダリングし、ユーザーが値を編集できるようにするために必要なビジネス・コンポーネントのInputデータ・タグ。フォームではこれらのタグを使用して、更新する属性の値が含まれるHTTPリクエスト・パラメータを生成します。
  6. 更新するデータソース属性の行キーが含まれるコントロールを生成するための非表示のHTML入力要素。フォームではこのコントロールを使用して、更新する行に対する別のHTTPリクエスト・パラメータを生成します。

送信JSPページには、次の情報が含まれます。

  1. 編集JSPページと同じアプリケーション・モジュール接続およびビュー・オブジェクト・データソースを指定する、ビジネス・コンポーネント・データ・タグ。
  2. データがコミットされた後アプリケーション・モジュールの状態を解放するためにreleasemode属性がstatelessに設定された、ビジネス・コンポーネントの<jbo:ApplicationModule>データ・タグ。
  3. 更新するデータソース行および属性を、編集JSPページによって送信されたHTTPリクエスト・パラメータと照合するための、<jbo:Row>データ・タグ。
  4. データベースに対して行をコミット(またはロールバック)するためのビジネス・コンポーネント・データ・タグ。
  5. ユーザーが編集JSPページに戻って行を追加編集するためのHREF。

ビジネス・コンポーネントのInputタグを使用した入力パラメータの指定

HTTP入力パラメータを生成するには、ビジネス・コンポーネントのInputデータ・タグで、データソースおよびdataitemを指定する必要があります。データソースは更新するビジネス・コンポーネント・ビュー・オブジェクトを識別し、dataitemは編集された値を受け取るビュー・オブジェクト内の属性を識別します。入力パラメータにより、ユーザーが入力した値とdataitemについて指定した名前が組み合せられ、名/値ペアが作成されます。

たとえば、顧客(custDataSource)データソースの顧客番号(CustNo)属性の更新に使用した場合の、基本的なInputTextデータ・タグの外観は次のようになります。

<jbo:InputText datasource="custDataSource" dataitem="CustNo" />

タイプが「オブジェクト」であるdataitemには、オブジェクト表記法を使用できます。

<jbo:InputText datasource="custDataSource" dataitem="Address.City" />

ビジネス・コンポーネントのShowValueタグを使用した行キーの取得

Inputデータ・タグを目的のデータソース属性にバインドした後、ユーザーが現在編集しているデータソース行を識別する必要があります。編集JSPページに表示される行を一意に識別するには、ビュー・オブジェクト・データソースの特殊属性を使用して、行の行キー値を取得します。続いて、HTMLの非表示入力要素を使用して、行キー値をポストします。たとえば、現在の行に対して行キーを生成するには、編集フォームに次のような要素が含まれる必要があります。

 

<input name="RowKeyValue" type="hidden" value="<jbo:ShowValue 
          datasource="custDataSource" dataitem="RowKey"/>" />        

このコードは、行キーの文字列表現をレンダリングするためにビジネス・コンポーネントのShowValueデータ・タグを使用しており、データソース内の現在の行を識別するために特殊ビュー・オブジェクト属性値RowKeyを使用しています。入力HTTPパラメータ名(RowKeyValue)は自分で選択する名前です。ただし、ShowValue dataitemの値は、データソース内のこの属性名と一致するために"RowKey"である必要があります。ShowValueデータ・タグのデータソース(custDataSource)は、Inputデータ・タグで指定されたデータソースと一致する必要があります。

注意: ビジネス・コンポーネントのRowデータ・タグのFindアクションを実行する場合、ShowValueデータ・タグおよび行キーを使用して、任意の行に対しHREFアンカーを生成することもできます。

引き続き顧客の例で説明すると、ユーザーが顧客番号を入力してフォーム・データを送信した後、ブラウザは入力した値および行キーに基づいてHTTPリクエスト・オブジェクトを生成します。

ビジネス・コンポーネントのRowタグを使用した行の更新

送信JSPページを使用してHTTPパラメータを取得し、指定の行でUpdateアクションを開始します。Updateアクションを含むRowデータ・タグがこの目的を果たします。

<jbo:Row id="myrow" datasource="custDataSource" rowkeyparam="RowKeyValue" action="Update" > </jbo:Row>

Rowデータ・タグのデータソース(custDataSource)は、挿入または編集JSPページ内のInputデータ・タグで識別されるものと同じデータソースです。編集JSPページの非表示入力要素(RowKeyValue)のユーザー定義名を、Rowデータ・タグのrowkeyparam属性に割り当てることで、更新を受け取る特定の行を識別します。Rowデータ・タグでは、HTTPリクエスト・オブジェクトから行キー値を取得するためにrowkeyparamタグ属性を使用します。ビジネス・コンポーネント・データソース内のターゲット行を特定するために行キーを使用すると、Rowデータ・タグが受信したHTTPパラメータに対して属性の設定操作を暗黙的に実行します。これらのパラメータには、レンダリングされたフォーム・コントロールから取得された属性名/値ペアが含まれます。Inputデータ・タグのdataitemに、更新するデータソース属性の名前を指定したため、Rowデータ・タグが更新する正しい属性を受け取ります。

注意: Rowデータ・タグによって実行される更新操作が効率的に機能し、不要な属性の更新は回避されます。ユーザーの入力値が含まれるリクエスト・パラメータの値が元の値(レンダリングされたJSPの非表示入力要素内に表示)と異なる場合を除いて、Rowデータ・タグは属性の設定操作をスキップします。


ビジネス・コンポーネント・フォームのInputデータ・タグについて

ビジネス・コンポーネント・データ・タグを使用した行の更新