ユーザーによる行挿入を可能にするには、通常、連動する次の2つのJSPページを作成します。
注意: JDeveloperに用意されているデータ・ページ・ウィザードにより、ユーザーがビュー・オブジェクトに行を挿入できるようにするための編集および送信JSPページを簡単に作成できます。このウィザードは「新規」ギャラリで利用可能です。ウィザードを起動するには、「ファイル」->「新規」を選択し、「Web Tier」 - 「JSP for Business Components」カテゴリを選択して「Browse & Edit Form」項目をダブルクリックします。
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ページには次のものが含まれている点に注意してください。
POST
リクエストの使用をお薦めします。このプロトコルを使用すると、どのような長さのパラメータ値でもブラウザから送信できます。<form>タグでmethod="post"
を指定しない場合、ブラウザはHTTPのGET
により添付のパラメータ値を送信JSPページのURLに送りますが、この場合、URLが255文字を超える長さになると問題が発生する可能性があります。POST
リクエストを使用する場合、<form>タグは次のようになります。 <form name="DataInput_form" method="post" action="submit.jsp">
送信JSPページには次のものが含まれます。
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セッションはタイムアウトになり、ビュー・オブジェクト・キャッシュに対する未完了の変更はすべてロールバックされます。ユーザーによる行の削除を可能にするには、行を削除するためのユーザー・インタフェースをアプリケーションに用意する必要があります。
HTTP入力パラメータを生成するには、BC4J Inputデータ・タグでビュー・オブジェクト(データソース)および属性(データ項目)を指定する必要があります。データソースには更新するBC4Jビュー・オブジェクトを指定し、データ項目には挿入された値を受け取るビュー・オブジェクトの属性を指定します。入力パラメータは、ユーザーが入力する値と指定した名前を組み合せて名前と値のペアを構成します。
たとえば、顧客ビュー・オブジェクト(custDataSource)の顧客番号(CustNo)属性の更新に使用する基本的なInputTextデータ・タグは次のようになります。
<jbo:InputText datasource="custDataSource" dataitem="CustNo" />
dataitem(データ項目)には次のようにオブジェクト表記法を使用できる点に注意してください。
<jbo:InputText datasource="custDataSource" dataitem="Address.City" />
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リクエスト・オブジェクトがブラウザで生成されます。
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データ・タグで更新する属性を正しく取得できます。
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パラメータの新規に作成された行に対して更新を実行します。