ユーザーによる行挿入を可能にするには、通常、連動する次の2つのJSPページを作成します。
ビジネス・コンポーネントInputタグの機能
HTMLフォーム要素で<jbo:Input Xxx.../>
や<jbo:Row.../>
などのビジネス・コンポーネント・データ・タグを使用すると、次のユーザー操作を可能にするJSPフォームを作成できます。
重要: 挿入JSPページを最初から作成する場合、ビジネス・コンポーネントInputデータ・タグと静的HTMLフォーム要素の両方を同じページで使用できます。 ただし、ビジネス・コンポーネントInputデータ・タグまたはHTMLフォーム要素のどちらを使用するかは、アプリケーションの要求やそれぞれの制約に対する許容度に依存します。
Webサーバーで作成された挿入JSPページには、次のものが含まれている必要があります。
1番目の要件は、タグのdataitem属性を挿入するビュー・オブジェクトの属性に設定することにより、ビジネス・コンポーネントInputデータ・タグで対応します。 2番目の要件は、ビジネス・コンポーネント<jbo:ShowValue>
データ・タグおよび特別なビュー・オブジェクト属性RowKey
を使用して値を割り当てるHTMLの非表示入力要素で対応します。ブラウザはJSPフォーム要素から収集したこの情報をHTTP入力パラメータとして、処理のために送信JSPページにポストします。
入力および送信JSPページの機能
ビジネス・コンポーネントInputデータ・タグを使用すると、ビュー・オブジェクトからデフォルト値を持つコントロールを簡単にレンダリングできます。ただし、Inputデータ・タグを使用して行を挿入するには、ユーザーが送信JSPページにデータを送信できるようになる前に空の行をビュー・オブジェクトに作成している必要があります。つまり、ユーザーがデータを送信するかどうかに関係なく、挿入JSPページに行が作成されている必要があることを意味します。ビュー・オブジェクトはHTTPセッションのタイムアウト後、自動的に空の行をロールバックするため、通常問題は発生しませんが、タイムアウトの前に他のJSPフォームで空の行がユーザーに表示される場合があります。
JSPページに空の行が表示されないようにするには、挿入JSPページで静的HTMLフォーム要素を使用します。この場合、コントロールがビュー・オブジェクトにバインドされないため、デフォルトの選択肢をコーディングする必要があります。 さらに、デフォルトのサイズおよび書式や、ビジネス・コンポーネントInputデータ・タグとビュー・オブジェクトの連携により実行されるデータ検証を使用できなくなります。
このように、データ・バインドされたコントロールを使用し、ページに入力されない部分がある(結果としてビュー・オブジェクトに関連する空の行が表示される可能性がある)ことを受け入れるか、機能が制限されている静的HTMLフォーム要素のセットを使用し、それらをコーディングして値を表示するかのいずれか方法を選択できます。
これらの2つの方法があることを理解し、データ入力(挿入)JSPページには次のものが含まれている点に注意してください。
releasemode
属性が設定された<jbo:ApplicationModule>
データ・タグ。 リザーブ・モードにより、ユーザーが挿入操作を完了するまでビュー・オブジェクトは変更されません。<form>
要素。POST
リクエストの使用をお薦めします。このプロトコルを使用すると、どのような長さのパラメータ値でもブラウザから送信できます。 <form>
タグでmethod="post"
を指定しない場合、ブラウザはHTTPのGET
により添付のパラメータ値を送信JSPページのURLに送りますが、この場合、URLが255文字を超える長さになると問題が発生する可能性があります。 POST
リクエストを使用する場合、<form>タグは次のようになります。<form name="DataInput_form" method="post" action="submit.jsp">
http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.3
)を参照してください。<jbo:Row>
データ・タグ。送信JSPページには次のものが含まれます。
releasemode
属性が設定されている、ビジネス・コンポーネント<jbo:ApplicationModule>
データ・タグ。<jbo:Row>
データ・タグが含まれます。 このアクションにより、更新するビュー・オブジェクトの行および属性と挿入JSPページから送られるHTTPリクエスト・パラメータを<jbo:Row>
データ・タグで一致させることができます。<jbo:Row>
データ・タグが含まれます。このアクションでは、ビュー・オブジェクトに新規行が作成されるのみです。 更新するビュー・オブジェクトの行および属性と挿入JSPページからポストされるHTTPリクエスト・パラメータを一致させるには、<jbo:SetAttribute>
データ・タグを追加する必要があります。ビジネス・コンポーネントInputデータ・タグを使用し、ユーザーが新規行をビュー・オブジェクトに挿入できるようにする場合、挿入フォームを表示する前に空の行を作成する必要があります。これにより、新規行にはビュー・オブジェクトからのデフォルトの属性値が表示されます。 デフォルト値は、ビジネス・コンポーネント固有のドメインの順序を使用して取得される場合があります。
次のようにビジネス・コンポーネントRowデータ・タグでCreateアクションを指定し、処理を実行します。
<jbo:Row id="myrow" datasource="custDataSource"
action="Create" />
<jbo:Row>
データ・タグのビュー・オブジェクト(custDataSource)は、Inputデータ・タグで指定したビュー・オブジェクトと同じです。
ユーザーに対してあらかじめ選択された値を表示するJSPコントロールを作成するには、次のように<jbo:SetAttribute>
データ・タグを使用して個々の行の属性に選択値を指定します。
<jbo:Row id="myrow" datasource="custDataSource" action="Create" >
<jbo:SetAttribute dataitem="Id" value="23" /> <jbo:SetAttribute dataitem="Name"
value="Steve" /> </jbo:Row>
<jbo:SetAttribute>
データ・タグのデータ項目(IdおよびName)は、選択された値を表示するInputデータ・タグのデータ項目に対応します。
注意: ユーザーが挿入JSPページの送信ボタンをクリックしないかぎり、ビュー・オブジェクトに新規行が残されます。ユーザーがブラウザをシャットダウンすると、HTTPセッションはタイムアウトになり、ビュー・オブジェクト・キャッシュに対する未完了の変更はすべてロールバックされます。ユーザーによる行の削除を可能にするには、行を削除するためのユーザー・インタフェースをアプリケーションに用意する必要があります。
HTTP入力パラメータを生成するには、ビジネス・コンポーネントInputデータ・タグでビュー・オブジェクト(datasource
)および属性(dataitem
)を指定する必要があります。 データソースには更新するビジネス・コンポーネント・ビュー・オブジェクトを指定し、データ項目には挿入された値を受け取るビュー・オブジェクトの属性を指定します。入力パラメータは、ユーザーが入力する値と指定した名前を組み合せて名前と値のペアを構成します。
たとえば、顧客(custDataSource
)ビュー・オブジェクトの顧客番号(CustNo
)属性の更新に使用する基本的な<jbo:InputText>
データ・タグは次のようになります。
<jbo:InputText datasource="custDataSource" dataitem="CustNo" />
dataitem(データ項目)には次のようにオブジェクト表記法を使用できる点に注意してください。
<jbo:InputText datasource="custDataSource" dataitem="Address.City" />
ビジネス・コンポーネントInputデータ・タグを任意のビュー・オブジェクト属性にバインドした後で、ユーザーにより現在挿入されているデータソースの行を識別する必要があります。挿入JSPページに表示される行を一意に識別するには、その行の行キー値を取得するための特別なビュー・オブジェクト属性を使用します。その後、HTMLの非表示入力要素を使用してその行キー値をポストします。たとえば、現在の行に対して行キーを生成するには、挿入フォームに次のような要素をインクルードする必要があります。
<input name="RowKeyValue" type="hidden" value="<jbo:ShowValue
datasource="custDataSource" dataitem="RowKey"/>" />
このコードでは、<jbo:ShowValue>
データ・タグ内で特別なビュー・オブジェクト属性RowKey
を使用して行キーの文字列を表示することにより、データソース内の現在の行を識別しています。 HTTP入力パラメータ名(RowKeyValue
)は変更できます。 ただし、<jbo:ShowValue>
タグのデータ項目の値には、ビュー・オブジェクト内の属性名と一致するようにRowKey
を指定する必要があります。 <jbo:ShowValue>
データ・タグのデータソース(custDataSource
)は、Inputデータ・タグで指定したデータソースと一致している必要があります。
注意: <jbo:Row>
データ・タグのFindアクションを実行する場合にも、任意の行のHREFアンカー・タグを生成するために<jbo:ShowValue>
データ・タグおよび行キーを使用できます。
前述の顧客番号の例で、ユーザーが顧客番号を入力し、フォーム・データを送信すると、入力された値と行キーに基づいたHTTPリクエスト・オブジェクトがブラウザで生成されます。
HTTPパラメータを取得し、指定された行で更新アクションを開始するには、送信JSPページを使用します。 次のように<jbo:Row>
データ・タグでUpdateアクションを指定し、処理を実行します。
<jbo:Row id="myrow" datasource="custDataSource" rowkeyparam="RowKeyValue"
action="Update" > </jbo:Row>
<jbo:Row>
データ・タグのデータソース(custDataSource
)は、挿入または編集JSPページのInputデータ・タグで指定したデータソースと同じです。 挿入JSPページの非表示入力要素(RowKeyValue
)のユーザー定義名をRowデータ・タグのrowkeyparam
属性に割り当てることにより、更新を受け取る特定の行を識別します。 <jbo:Row>
データ・タグは、rowkeyparam
タグ属性を使用してHTTPリクエスト・オブジェクトから行キー値を取得します。 行キーを使用してビジネス・コンポーネント・データソース内の目的の行を検索すると、<jbo:Row>
データ・タグは、作成されたフォーム・コントロールから取得した属性の名前と値のペアを含む受信HTTPパラメータに基づいて暗黙的に属性設定処理を実行します。 Inputデータ・タグのデータ項目で更新するデータソース属性の名前を指定しているため、<jbo:Row>
データ・タグでは更新する属性を正しく取得できます。
HTTPパラメータを取得し、JSPページが更新する行を作成するには、送信JSPページを使用します。 次のように<jbo:Row>
データ・タグでCreateアクションを指定し、処理を実行します。
<jbo:Row id="myrow" datasource="custDataSource" action="Create" >
<jbo:SetAttribute dataitem="*" /> </jbo:Row>
<jbo:Row>
タグのデータソース(custDataSource
)は、新規行を受け取るデータソースです。 <jbo:SetAttribute>
データ・タグにより、処理ページでHTTPの名前と値のペアを受け取ることができます。 <jbo:SetAttribute>
のデータ項目でワイルド・カード(*)を指定すると、タグは受け取った名前とビュー・オブジェクト内の行属性の名前を一致させて、新規行の属性を更新します。 フォーム要素の名前を<jbo:Row>
属性の名前と一致するように付けている場合、<jbo:SetAttribute>
データ・タグは受け取ったすべてのHTTPパラメータの新規に作成された行に対して更新を実行します。
ビジネス・コンポーネント・フォームのInputデータ・タグについて
ビジネス・コンポーネント・データ・タグを使用した行の作成
Copyright © 1997, 2004, Oracle. All rights reserved.