hGridを対話型にするには、HGridDataProxy
インタフェースを使用します。このプロキシには、開く、閉じる、フォーカス、およびhGridのbreadcrumbリンクを処理する役割があります。
HGridを対話型にするには、プロキシで要求にまたがってHGridの状態を保持する必要があります。oracle.cabo.ui.data.tree.ClientStateHGridDataProxy
は、URLをエンコードすることでクライアント側の状態を保持するプロキシのインスタンスです。
次のサンプル・コードでは、UIXサーブレット・イベント・ハンドラでClientStateHGridDataProxy
が作成され、EventResult
にプロキシが格納されます。
Example:
package oracle.cabo.doc.demo;
public class HGridDemo
{
public static EventResult doHGridEvent(BajaContext bc, Page page, PageEvent event)
{
HGridDataProxy hGridProxy = new ClientStateHGridDataProxy();
EventResult result = new EventResult(page);
result.setProperty("hGridProxy", hGridProxy);
return result;
}
}
このコードをコールするには、次のコード部分で示すように、先ほどのメソッドをデフォルトのイベント・ハンドラとしてUIX XMLファイルに登録します。
Example:
<handlers>
<event name="*">
<method class="oracle.cabo.doc.demo.HGridDemo"
method="doHGridEvent"/>
</event>
</handlers>
イベント・ハンドラで作成され、EventResult
に格納されたプロキシは、hGridのproxy
属性にデータ・バインドする必要があります。次のコード部分は、このプロセスの例です。
Example:
<hGrid id="hg1"
treeData="${uix.data.treeData.nodes}"
proxy="${uix.eventResult.hGridProxy}">
ClientStateHGridDataProxy
により、サーバー・サイドで処理すべき特定のUIXサーブレットのイベントが生成されます。また、次の4つのイベント・パラメータも生成できます。
ClientStateHGridDataProxy
により起動されるイベントの説明、および各イベントに付随するイベント・パラメータは次のとおりです。
この4つのイベントはサーバーで処理する必要があります。A ClientStateHGridDataProxy
は、それぞれのケースで作成される必要があります。これは単に、どのコンストラクタをコールするかという問題です。次のコードはHGridの各イベントの処理に使用します(コンストラクタの詳細は、JavadocのClientStateHGridDataProxyを参照してください)。
Example:
public static EventResult doHGridEvent(BajaContext bc, Page page,
PageEvent event)
{
HGridDataProxy hGridProxy;
if (event!=null)
{
String state = event.getParameter(UIConstants.STATE_PARAM);
String root = event.getParameter(UIConstants.ROOT_PARAM);
String node = event.getParameter(UIConstants.NODE_PARAM);
String eventName = event.getName();
if (eventName.equals(UIConstants.COLLAPSE_ALL_EVENT))
{
hGridProxy = new ClientStateHGridDataProxy(state, root, false);
}
else if (eventName.equals(UIConstants.EXPAND_ALL_EVENT))
{
hGridProxy = new ClientStateHGridDataProxy(state, root, true);
}
else if (eventName.equals(UIConstants.FOCUS_EVENT))
{
hGridProxy = new ClientStateHGridDataProxy(state, root);
}
else // eventName.equals(UIConstants.EXPAND_EVENT)
{
hGridProxy = new ClientStateHGridDataProxy(state, root, node);
}
}
else // there is no event. This is the initial state.
{
hGridProxy = new ClientStateHGridDataProxy();
}
// create an EventResult such that the current page is rendered again, in
// response to the event
EventResult result = new EventResult(page);
// set the HGrid proxy as a property on the EventResult
result.setProperty("hGridProxy", hGridProxy);
return result;
}
リーフ・ノードを含む一部のサブノードで最初にフォーカスを当てるhGridを作成するには、ClientStateHGridDataProxy(int[ ] focusPath)コンストラクタを使用します。ints
の配列は、フォーカスのあるサブノードへのパスです。ルートからフォーカス・ノードへのパスで、各要素は次のノードの(ゼロ・ベースの)子索引となります。最初の要素はルート・ノードの子索引で、パス上の次のノード、Aを生成します。次の要素はノードAの子索引で、ノードBを生成する、と続きます。たとえば、ルートの1番目の子の、3番目の子にフォーカスを当てるには次のようにします。
Example:
// Starting from the root, follow the first child (ie: index zero)
// and then follow the 3rd child (ie: index 2)
int[] focusPath = {0, 2};
hGridProxy = new ClientStateHGridDataProxy(focusPath);
hGridで表示されるツリーが小さいため、フォーカス機能が不必要な場合があります。フォーカス列(およびbreadcrumbs)をオフにするには、ClientStateHGridDataProxyインスタンスについてsetBreadCrumbsEnabled(false)をコールします。これは、hGridがルート上でフォーカスを当てられている(デフォルト・フォーカス)場合のみ実行できるので注意してください。あるサブノードでhGridにフォーカスが当てられている場合、ユーザーはフォーカス・アウトの手段を得ることができなくなるため、breadcrumbsを無効にする必要があります。
ClientStateHGridDataProxyのdoHGridWindowEventというコンストラクタを使用すると、hGridでの大規模なレコード・セットのナビゲーションに対処できます。この機能の有効化の詳細は、「childBlockSizeについて」を参照してください。
Copyright © 1997, 2004, Oracle. All rights reserved.