ユーザーが行を挿入できるようにするには、一般に連携する2つのJSPページを作成します。
ビジネス・コンポーネントのInputタグの役割
HTMLフォーム要素内の<jbo:Input Xxx... />
および<jbo:Row... />
を含むビジネス・コンポーネント・データ・タグを使用して、JSPフォームを作成できます。このJSPフォームでユーザーは次のことを実行できます。
重要: 挿入JSPページを最初から作成する場合、ビジネス・コンポーネントのInputデータ・タグおよび静的なHTMLフォーム要素を同一ページ上で混在させることができます。ただし、ビジネス・コンポーネントのInputデータ・タグとHTMLフォーム要素のどちらを使用するかの選択は、アプリケーションのニーズと、いくつかの制限をどれだけ容認できるかによって決まります。
Webサーバーによってレンダリングされる挿入JSPページには、次のものが含まれる必要があります。
挿入するビュー・オブジェクト属性に対してタグのdataitemを設定した場合、ビジネス・コンポーネントのInputデータ・タグにより1つ目の必要項目が処理されます。<jbo:ShowValue>
データ・タグおよび特殊ビュー・オブジェクト属性RowKey
を使用して値を割り当てたHTMLの非表示入力要素により、2つ目の必要項目が処理されます。ブラウザは、JSPフォーム要素から収集したこの情報を、HTTP入力パラメータとして処理用の送信JSPページにポストします。
入力JSPページおよび送信JSPページの役割
ビジネス・コンポーネントのInputデータ・タグを使用して、ビュー・オブジェクトのデフォルト値によりコントロールを簡単にレンダリングできます。ただし、Inputデータ・タグを使用して行を挿入するには、ユーザーが送信JSPページにデータを送信する前にビュー・オブジェクト内に空の行を作成しておく必要があります。この要件は、ユーザーがデータを送信するかどうかにかかわらず、挿入JSPページによって行が作成されることを意味します。HTTPセッションのタイムアウト後にビュー・オブジェクトが自動的に空の行をロールバックするため、通常これが問題になることはありませんが、タイムアウトになる前に他のJSPフォーム内に空の行が表示される場合があります。
JSPページ内に空の行を表示しないようにするには、かわりに挿入JSPページに静的なHTMLフォーム要素を使用するよう選択できます。この場合、コントロールはビュー・オブジェクトにバインドされないため、デフォルトの選択内容をコーディングする必要があります。さらに、ビュー・オブジェクトと連携するビジネス・コンポーネントのInputデータ・タグによって提供されるデフォルトのサイズ変更、書式設定およびデータ検証(提供の可能性あり)といったメリットが得られなくなります。
そのため、データバインドされたコントロールを使用し、ユーザーがページを完成させない可能性があることを受け入れるか(この場合ビュー・オブジェクトに関連付けられた空の行が表示される可能性があります)、または静的なHTMLフォーム要素のより限られたセットに依存し、これらをコーディングして値を表示できます。
この2つの対照的な方法を念頭に置くと、データ入力(挿入)JSPページには次の情報が含まれることになります。
releasemode
属性がreservedに設定された<jbo:ApplicationModule>
データ・タグ。reservedモードに指定すると、ユーザーが挿入操作を完了するまでビュー・オブジェクトが変更されなくなります。<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
<jbo:Row>
データ・タグ。
または
ユーザーがデータを送信した後に行を作成することにした場合、作成するページには、デフォルト値(ある場合)を指定したコントロールをレンダリングするために必要となる静的なHTMLフォーム要素が含まれます。フォームではこれらの要素を使用して、挿入する属性の値が含まれるHTTPリクエスト・パラメータを生成します。
送信JSPページには、次の情報が含まれます。
releasemode
属性がstatelessに設定された、ビジネス・コンポーネントの<jbo:ApplicationModule>
データ・タグ。
<jbo:Row>
データ・タグが含まれます。このアクションにより、<jbo:Row>
データ・タグは、更新するビュー・オブジェクト行および属性を、挿入JSPページによって送信されたHTTPリクエスト・パラメータと照合できます。
または
ユーザーがデータを送信した後に行を作成することにした場合、作成するページにはCreateアクションを含む<jbo:Row>
データ・タグが含まれます。このアクションでは、ビュー・オブジェクト内に新規行が作成されるだけです。続いて、更新するビュー・オブジェクト行および属性を、挿入JSPページによってポストされたHTTPリクエスト・パラメータと照合するために、<jbo:SetAttribute>
データ・タグを追加する必要があります。
ビジネス・コンポーネントのRowタグを使用した行の作成および更新
ビジネス・コンポーネントのInputデータ・タグを使用してユーザーがビュー・オブジェクトに新規行を挿入できるようにする場合、挿入フォームを送信する前に空の行を作成する必要があります。これによって、新規行にビュー・オブジェクトのデフォルト属性値を表示できます。デフォルト値は、ビジネス・コンポーネント固有のドメインに順序を使用して取得されている場合があります。
Createアクションを含むビジネス・コンポーネントのRowデータ・タグは、この目的を果たします。
<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>
データ・タグのdataitem(IdおよびName)は、選択した値でレンダリングするInputデータ・タグのdataitemに対応します。
注意: ユーザーが挿入JSPページの「送信」ボタンをクリックしない場合、新規行がビュー・オブジェクトに残ります。ユーザーがブラウザを閉じると、HTTPセッションは最終的にタイムアウトとなり、ビュー・オブジェクト・キャッシュに対する保留中の変更はロールバックされます。ユーザーがこの行を削除できるようにする場合は、アプリケーションで行を削除するためのユーザー・インタフェースが提供される必要があります。
ビジネス・コンポーネントのInputタグを使用した入力パラメータの指定
HTTP入力パラメータを生成するには、ビジネス・コンポーネントのInputデータ・タグで、ビュー・オブジェクト(datasource
)および属性(dataitem
)を指定する必要があります。datasourceは更新するビュー・オブジェクトを識別し、dataitemは挿入された値を受け取るビュー・オブジェクト内の属性を識別します。入力パラメータにより、ユーザーが入力した値とdataitemについて指定した名前が組み合せられ、名/値ペアが作成されます。
たとえば、顧客(custDataSource
)ビュー・オブジェクトの顧客番号(CustNo
)属性の更新に使用した場合の、基本的な<jbo:InputText>
データ・タグの外観は次のようになります。
<jbo:InputText datasource="custDataSource" dataitem="CustNo" />
タイプが「オブジェクト」であるdataitemには、オブジェクト表記法を使用できます。
<jbo:InputText datasource="custDataSource" dataitem="Address.City" />
ビジネス・コンポーネントのShowValueタグを使用した行キーの取得
ビジネス・コンポーネントのInputデータ・タグを目的のビュー・オブジェクト属性にバインドした後、ユーザーが現在挿入しているdatasource行を識別する必要があります。挿入JSPページに表示される行を一意に識別するには、ビュー・オブジェクトの特殊属性を使用して、行の行キー値を取得します。続いて、HTMLの非表示入力要素を使用して、行キー値をポストします。たとえば、現在の行に対して行キーを生成するには、挿入フォームに次のような要素が含まれる必要があります。
<input name="RowKeyValue" type="hidden" value="<jbo:ShowValue
datasource="custDataSource" dataitem="RowKey"/>" />
このコードは、行キーの文字列表現をレンダリングするために<jbo:ShowValue>
データ・タグを使用しており、データソース内の現在の行を識別するために特殊ビュー・オブジェクト属性値RowKey
を使用しています。入力HTTPパラメータ名( RowKeyValue
)は自分で選択する名前です。ただし、 <jbo:ShowValue>
dataitemの値は、ビュー・オブジェクト内のこの属性名と一致するために"RowKey
"である必要があります。<jbo:ShowValue>
データ・タグのデータソース(custDataSource
)は、Inputデータ・タグで指定されたデータソースと一致する必要があります。
注意: <jbo:Row>
データ・タグのFindアクションを実行する場合、<jbo:ShowValue>
データ・タグおよび行キーを使用して、任意の行に対しHREFアンカーを生成することもできます。
引き続き顧客の例で説明すると、ユーザーが顧客番号を入力してフォーム・データを送信した後、ブラウザは入力した値および行キーに基づいてHTTPリクエスト・オブジェクトを生成します。
ビジネス・コンポーネントのRowタグを使用した行の更新
送信JSPページを使用してHTTPパラメータを取得し、指定の行でUpdateアクションを開始します。Updateアクションを含む<jbo:Row>
データ・タグがこの目的を果たします。
<jbo:Row id="myrow" datasource="custDataSource" rowkeyparam="RowKeyValue"
action="Update" > </jbo:Row>
<jbo:Row>
データ・タグのデータソース(custDataSource
)は、挿入または編集JSPページ内のInputデータ・タグで識別されるものと同じデータソースです。挿入JSPページの非表示入力要素(RowKeyValue
)のユーザー定義名を、Rowデータ・タグのrowkeyparam
属性に割り当てることで、更新を受け取る特定の行を識別します。<jbo:Row>
データ・タグでは、HTTPリクエスト・オブジェクトから行キー値を取得するためにrowkeyparam
タグ属性を使用します。ビジネス・コンポーネント・データソース内のターゲット行を特定するために行キーを使用すると、<jbo:Row>
データ・タグが受信したHTTPパラメータに対して属性の設定操作を暗黙的に実行します。これらのパラメータには、レンダリングされたフォーム・コントロールから取得された属性名/値ペアが含まれます。Inputデータ・タグのdataitemに、更新するデータソース属性の名前を指定したため、<jbo:Row>
データ・タグが更新する正しい属性を受け取ります。
ビジネス・コンポーネントのRowタグを使用した行の作成および更新
送信JSPページを使用して、HTTPパラメータを取得し、JSPページによって更新される行を作成します。Createアクションを含む<jbo:Row>
データ・タグがこの目的を果たします。
<jbo:Row id="myrow" datasource="custDataSource" action="Create" >
<jbo:SetAttribute dataitem="*" /> </jbo:Row>
<jbo:Row>
タグのデータソース(custDataSource
)は、新規行を受け取るデータソースです。<jbo:SetAttribute>
データ・タグにより、処理ページがHTTPの名/値ペアを受け取ることができます。<jbo:SetAttribute>
dataitemに対してワイルドカード記号(*)を指定すると、このタグは、受け取った名前をビュー・オブジェクト内の行属性名と照合して、新規行の属性を更新します。<jbo:Row>
属性名と一致するフォーム要素を指定した場合、<jbo:SetAttribute>
データ・タグは、受信したすべてのHTTPパラメータについて、新規作成された行に対する更新を実行します。
ビジネス・コンポーネント・フォームのInputデータ・タグについて
ビジネス・コンポーネント・データ・タグを使用した行の作成
Copyright © 1997, 2006, Oracle. All rights reserved.