BC4Jデータ・タグを使用した行の作成について

ユーザーによる行挿入を可能にするには、通常、連動する次の2つのJSPページを作成します。

BC4J Inputタグの機能

HTMLフォーム要素で<jbo:InputXxx... /><jbo:Row... />などのBC4Jデータ・タグを使用すると、次のユーザー操作を可能にするJSPフォームを作成できます。

重要: 挿入JSPページを最初から作成する場合、BC4J Inputデータ・タグと静的HTMLフォーム要素の両方を同じページで使用できます。ただし、BC4J Inputデータ・タグまたはHTMLフォーム要素のどちらを使用するかは、アプリケーションの要求やそれぞれの制約に対する許容度に依存します。

Webサーバーで作成された挿入JSPページには、次のものが含まれている必要があります。

1番目の要件は、タグのdataitem属性を、挿入するビュー・オブジェクトの属性に設定することで、BC4J Inputデータ・タグで対応します。2番目の要件は、BC4J ShowValueデータ・タグおよび特別なビュー・オブジェクト属性RowKeyを使用して値を割り当てるHTMLの非表示入力要素で対応します。ブラウザはJSPフォーム要素から収集したこの情報をHTTP入力パラメータとして、処理のために送信JSPページにポストします。

入力および送信JSPページの機能

BC4J Inputデータ・タグを使用すると、ビュー・オブジェクトからデフォルト値を持つコントロールを簡単にレンダリングできます。ただし、Inputデータ・タグを使用して行を挿入するには、ユーザーが送信JSPページにデータを送信できるようになる前に空の行をビュー・オブジェクトに作成している必要があります。つまり、ユーザーがデータを送信するかどうかに関係なく、挿入JSPページに行が作成されている必要があることを意味します。ビュー・オブジェクトはHTTPセッションのタイムアウト後、自動的に空の行をロールバックするため、通常問題は発生しませんが、タイムアウトの前に他のJSPフォームで空の行がユーザーに表示される場合があります。

JSPページに空の行が表示されないようにするには、挿入JSPページで静的HTMLフォーム要素を使用します。この場合、コントロールがビュー・オブジェクトにバインドされないため、デフォルトの選択肢をコーディングする必要があります。さらに、デフォルトのサイズおよび書式や、BC4J Inputデータ・タグとビュー・オブジェクトの連携により実行されるデータ検証を使用できなくなります。

このように、データ・バインドされたコントロールを使用し、ページに入力されない部分がある(結果としてビュー・オブジェクトに関連する空の行が表示される可能性がある)ことを受け入れるか、機能が制限されている静的HTMLフォーム要素のセットを使用し、それらをコーディングして値を表示するかのいずれか方法を選択できます。

これらの2つの方法があることを理解し、データ入力(挿入)JSPページには次のものが含まれている点に注意してください。

  1. アプリケーション・モジュール接続および有効なビュー・オブジェクトを指定するBC4Jデータ・タグ。

  2. 処理が完了するまでアプリケーション・モジュールの状態を保持するリザーブ・モードにreleasemode属性が設定されたBC4J ApplicationModuleデータ・タグ。リザーブ・モードにより、ユーザーが挿入操作を完了するまでビュー・オブジェクトは変更されません。

  3. actionで送信JSPページを指定したHTMLの<form>要素。

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


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

    HTTPプロトコルで定義されたHTTPメソッドに習熟していない場合、詳細はWorld Wide Web Consortium(W3C)のサイト(http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.3)を参照してください。
  4. ユーザーがデータを送信する前に行を作成する場合、ページには次のものが含まれます。

    または

    ユーザーがデータを送信した後で行を作成する場合、ページには指定のデフォルト値(ある場合)を持つコントロールを作成するために必要な静的HTMLフォーム要素が含まれます。フォームはこれらを使用し、挿入する属性の値を含むHTTPリクエスト・パラメータを生成します。

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

  1. 挿入JSPページと同じアプリケーション・モジュール接続およびビュー・オブジェクトを指定するBC4Jデータ・タグ。

  2. データがコミットされるとアプリケーション・モジュールの状態を解放するステートレス・モードにreleasemode属性が設定されたBC4J ApplicationModuleデータ・タグ。

  3. ユーザーがデータを送信する前に行を作成する場合、ページにはUpdateアクションが指定されたBC4J Rowデータ・タグが含まれます。このアクションにより、更新するビュー・オブジェクトの行および属性と挿入JSPページから送られるHTTPリクエスト・パラメータをRowデータ・タグで一致させることができます。

    または

    ユーザーがデータを送信した後で行を作成する場合、ページにはCreateアクションが指定されたBC4J Rowデータ・タグが含まれます。このアクションでは、ビュー・オブジェクトに新規行が作成されるだけです。更新するビュー・オブジェクトの行および属性と挿入JSPページからポストされるHTTPリクエスト・パラメータを一致させるには、BC4J SetAttributeデータ・タグを追加する必要があります。

  4. データベースに対して行をコミット(またはロールバック)するためのBC4Jデータ・タグ。

  5. ユーザーがさらに行挿入を行う場合に、挿入JSPに戻るためのHREF。

BC4J Rowタグを使用した行の作成および更新

BC4J Inputデータ・タグを使用し、ユーザーが新規行をビュー・オブジェクトに挿入できるようにする場合、挿入フォームを表示する前に空の行を作成する必要があります。これにより、新規行にはビュー・オブジェクトからのデフォルトの属性値が表示されます。デフォルト値は、BC4J固有のドメインの順序を使用して取得される場合があります。

次のようにRowデータ・タグでCreateアクションを指定し、処理を実行します。



<jbo:Row id="myrow" datasource="custDataSource" action="Create" />

Rowデータ・タグのビュー・オブジェクト(custDataSource)はInputデータ・タグで指定したビュー・オブジェクトと同じです。

ユーザーに対してあらかじめ選択された値を表示するJSPコントロールを作成するには、次のようにBC4J SetAttributeデータ・タグを使用して個々の行の属性に選択値を指定します。



<jbo:Row id="myrow" datasource="custDataSource" action="Create" >
<jbo:SetAttribute dataitem="Id" value="23" /> <jbo:SetAttribute dataitem="Name"
value="Steve" /> </jbo:Row>

SetAttributeデータ・タグのデータ項目(IdおよびName)は選択された値を表示するInputデータ・タグのデータ項目に対応します。

注意: ユーザーが挿入JSPページの送信ボタンをクリックしないかぎり、ビュー・オブジェクトに新規行が残されます。ユーザーがブラウザをシャットダウンすると、HTTPセッションはタイムアウトになり、ビュー・オブジェクト・キャッシュに対する未完了の変更はすべてロールバックされます。ユーザーによる行の削除を可能にするには、行を削除するためのユーザー・インタフェースをアプリケーションに用意する必要があります。

BC4J Inputタグを使用した入力パラメータの指定

HTTP入力パラメータを生成するには、BC4J Inputデータ・タグでビュー・オブジェクト(データソース)および属性(データ項目)を指定する必要があります。データソースには更新するBC4Jビュー・オブジェクトを指定し、データ項目には挿入された値を受け取るビュー・オブジェクトの属性を指定します。入力パラメータは、ユーザーが入力する値と指定した名前を組み合せて名前と値のペアを構成します。

たとえば、顧客ビュー・オブジェクト(custDataSource)の顧客番号(CustNo)属性の更新に使用する基本的なInputTextデータ・タグは次のようになります。



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

dataitem(データ項目)には次のようにオブジェクト表記法を使用できる点に注意してください。



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

BC4J ShowValueタグを使用した行キーの取得

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



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

このコードでは、BC4J ShowValueデータ・タグ内で特別なビュー・オブジェクト属性RowKeyを使用して行キーの文字列を表示することにより、データソース内の現在の行を識別しています。HTTP入力パラメータ名(RowKeyValue)は変更できます。ただし、ShowValueタグのデータ項目の値には、ビュー・オブジェクト内の属性名と一致するように"RowKey"を指定する必要があります。ShowValueデータ・タグのデータソース(custDataSource)はInputデータ・タグで命名したデータソースと一致している必要があります。

注意: BC4J Rowデータ・タグのFindアクションを実行する場合にも、任意の行のHREFアンカー・タグを生成するためにShowValueデータ・タグおよび行キーを使用できます。

前述の顧客番号の例で、ユーザーが顧客番号を入力し、フォーム・データを送信すると、入力された値と行キーに基づいたHTTPリクエスト・オブジェクトがブラウザで生成されます。

BC4J Rowタグを使用した行の更新

HTTPパラメータを取得し、指定された行で更新アクションを開始するには、送信JSPページを使用します。次のようにRowデータ・タグでUpdateアクションを指定し、処理を実行します。



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

Rowデータ・タグのデータソース(custDataSource)は、挿入または編集JSPページのInputデータ・タグで指定したデータソースと同じです。挿入JSPページの非表示入力要素(RowKeyValue)のユーザー定義名をRowデータ・タグのrowkeyparam属性に割り当てることにより、更新を受け取る特定の行を識別します。Rowデータ・タグはrowkeyparamタグ属性を使用して、HTTPリクエスト・オブジェクトから行キー値を取得します。行キーを使用してBC4Jデータソース内の目的の行を検索すると、Rowデータ・タグは、作成されたフォーム・コントロールから取得した属性の名前と値のペアを含む受信HTTPパラメータに基づいて暗黙的に属性設定処理を実行します。Inputデータ・タグのデータ項目で更新するデータソース属性の名前を指定したため、Rowデータ・タグで更新する属性を正しく取得できます。

BC4J Rowタグを使用した行の作成および更新

HTTPパラメータを取得し、JSPページが更新する行を作成するには、送信JSPページを使用します。次のようにRowデータ・タグでCreateアクションを指定し、処理を実行します。



<jbo:Row id="myrow" datasource="custDataSource" action="Create" >
<jbo:SetAttribute dataitem="*" /> </jbo:Row>

Rowタグのデータソース(custDataSource)は、新規行を受け取るデータソースです。BC4J SetAttributeデータ・タグにより、処理ページでのHTTPの名前と値のペアを受け取ることができます。SetAttributeのデータ項目でワイルド・カード(*)を指定すると、タグは受け取った名前とビュー・オブジェクト内の行属性の名前を一致させて、新規行の属性を更新します。行属性の名前と一致するようにフォーム要素の名前を付けている場合は、SetAttributeデータ・タグは受け取ったすべてのHTTPパラメータの新規に作成された行に対して更新を実行します。


BC4JフォームのInputデータ・タグについて
データ・タグを使用した行の作成