UIX開発者ガイド | ![]() 目次 |
![]() 前へ |
![]() 次へ |
UIXの目標の1つは、異なるデバイスに同じページ記述テクノロジを提供することです。このトピックでは、UIXを使用してモバイル・アプリケーションを記述する方法を説明します。
UIXは現在、Pocket PCのInternet Explorerでサポートされています。将来はPalm用ブラウザもサポートされる予定です。携帯電話またはポケベルは現在サポートされていません。これらは将来iAS Wirelessと組み合せてサポートされる予定です。
ここでは、次の項目について説明します。
<ctrl:page xmlns="http://xmlns.oracle.com/uix/ui"
xmlns:ctrl="http://xmlns.oracle.com/uix/controller">
<ctrl:content xmlns:ui="http://xmlns.oracle.com/uix/ui">
<form name="demoForm"
xmlns="http://xmlns.oracle.com/uix/ui">
<contents>
<pageLayout title="New Expense">
<privacy>
<link text="Privacy"
destination="http://www.oracle.com"/>
</privacy>
<about>
<link text="About"
destination="http://www.oracle.com"/>
</about>
<globalButtons>
<globalButtonBar>
<contents>
<globalButton text="Home"
destination="http://www.oracle.com"/>
<globalButton text="Portal"
destination="http://www.oracle.com"/>
</contents>
</globalButtonBar>
</globalButtons>
<corporateBranding>
<image source="images/pdaOracle.gif"/>
</corporateBranding>
<pageButtons>
<pageButtonBar>
<contents>
<submitButton text="OK" ctrl:event="error"/>
<submitButton text="Cancel"/>
<submitButton text="New Expense"/>
</contents>
</pageButtonBar>
</pageButtons>
<contents>
<labeledFieldLayout>
<contents>
<messageTextInput required="yes"
id="amount"
name="amount"
prompt="Amount"/>
<messageDateField required="yes"
name="date"
prompt="Date" />
<inlineMessage prompt="Have Receipt">
<contents>
<flowLayout>
<contents>
<radioGroup name="receipt">
<childData>
<option text="Yes" value="yesReceipt"/>
<option text="No" value="noReceipt"/>
</childData>
</radioGroup>
</contents>
</flowLayout>
</contents>
</inlineMessage>
</contents>
</labeledFieldLayout>
</contents>
</pageLayout>
</contents>
</form>
</ctrl:content>
</ctrl:page>
次のイメージは、デスクトップ・ブラウザとPDAでページがどのように表示されるか示しています。
図23-2: PDAブラウザ
PDA向けに設計されたページが比較的シンプルならばそれが最適に見え、デスクトップ向けに設計されたページはPDAに対しては大きすぎるように見えるのは、明らかです。この例で示したような理由から、UIXは、異なるデバイスに同じUIXページを使用するのではなく、異なるデバイスに1つのページ記述テクノロジを提供することを目標にしているのです。
前述した「概要」セクションの例は、リクエストを行うデバイスによって出力が変更されることを示しています。たとえば、デスクトップ・ブラウザではページ・ボタンが繰り返され右寄せされていますが、PDAでは1回レンダリングされて左寄せされています。デバイスは次の3つのタイプにグループ分けされます。
Agent.TYPE_DESKTOP
: デスクトップやラップトップなどの画面サイズが大きいデバイス。
Agent.TYPE_PDA
: PDAなどの画面サイズが中くらいのデバイス。
Agent.TYPE_PHONE
: 携帯電話やポケベルなどの画面サイズが小さいデバイス。
開発者は特定のエージェント・タイプを念頭に置いてページを記述します。実際は多くのページが複数のエージェント・タイプで稼働しますが、これはいつもあてはまるわけではありません。指定されたエージェント・タイプについて、Beanがサポートされていない場合や、特定の属性または子がサポートされていない場合もあります。一般に、デスクトップ・マシンでサポートされているものはPDAでサポートされているもののスーパーセットであり、PDAでサポートされているものは携帯電話でサポートされているもののスーパーセットです。これは、一般にデスクトップ・マシンの機能はPDAの機能のスーパーセットであり、PDAの機能は携帯電話の機能のスーパーセットであるという事実を反映しています。
開発者は<agent>タグによってuiXMLでエージェント・タイプを決定します。次に例を示します。
<ctrl:page xmlns="http://xmlns.oracle.com/uix/ui"
xmlns:ctrl="http://xmlns.oracle.com/uix/controller">
<ctrl:content>
<dataScope>
<contents>
<flowLayout>
<contents>
<styledText styleClass="OraInstructionText" text="You are looking at this on a "/>
<styledText styleClass="OraInstructionText" >
<boundAttribute name="text">
<if>
<agent type="desktop"/>
<fixed text="desktop or laptop."/>
<if>
<agent type="pda"/>
<fixed text="pda."/>
<fixed text="um, well, let's see, not a desktop machine, laptop, or pda. You're wild!"/>
</if>
</if>
</boundAttribute>
</styledText>
</contents>
</flowLayout>
</contents>
</dataScope>
</ctrl:content>
</ctrl:page>
開発者はJavaScriptサポートに依存することはできません。PDAブラウザはJavaScriptをサポートする方向ですが、多くのブラウザはまだサポートしていません。スクリプトBeanはJavaScript対応ブラウザにおけるユーザーの操作性を強化するためにサポートされていますが、スクリプトが有効でないためにアプリケーションがエラーを起こすことは回避すべきです。
通常これは、クライアント側の検証を行う場合にJavaScriptに依存しないことを意味します。開発者はいつもサーバー側の検証を行っているはずですが、これはモバイル・アプリケーションにとって絶対的に必要なものです。
次に示すリストは、デスクトップ・マシンとPDAでサポートされているものの違いを表しています。これは完全なリストではありません。コンポーネント固有のドキュメントには、PDAでサポートされていない属性または子(あるいはその両方)すべての情報が含まれています。
次のコンポーネントはサポートされていません。コンポーネントもその子もレンダリングされず、警告がエラー・ログに記述されます。
次のコンポーネントは無視されます。これらはページの正しい動作に不可欠ではないため、警告はログに記述されません。
次のコンポーネントはそれ自身では何もレンダリングしませんが、索引付けされた子をレンダリングします。
次のコンポーネントはPDAでサポートされています。ただしそれらの動作は、言及する価値が十分にあるほど、デスクトップ・マシンでの動作とはかけ離れています。
ブラウザ・ルック&フィール(BLAF)のページ・ナビゲーションを使用していた開発者は、おそらく次の事実にとまどうはずです。
PDAの制限によって、複数のパラメータが1つのパラメータとしてエンコードされる場合があるため、デコードが必要になります。UIX Controllerを使用している開発者は、コントローラで自動的にパラメータがデコードされるため、この点を心配する必要はありません。それ以外の場合、開発者にはパラメータをデコードするためのいくつかのオプションがあります。
javax.servlet.ServletRequest
を使用している場合、開発者はこれを使用してoracle.cabo.share.data.ServletRequestParameters
のインスタンスを作成し、ServletRequest
で見つかったパラメータにアクセスする任意のメソッドをそのインスタンスでコールします。たとえば、ServletRequest
のインスタンスが「request」と仮定するとコードは次のようになります。
String fooValue = request.getParameter("foo");
....
これは、次のコードで置き換えられます。
ServletRequestParameters params = new ServletRequestParameters(request)
String fooValue = params.getParameter("foo");
....
「request」を使用してjava.util.Dictionary
を取得する方法もあります。次に例を示します。
Dictionary d = ServletRequestParameters.createRequestDictionary(request);
String fooValue = (String)d.get("foo");
開発者はjava.util.Dictionary
で開始してDictionary
が返されるようにすることもできます。たとえば、Dictionary
のインスタンスが「dictionary」と仮定します。
Dictionary d = ServletRequestParameters.createRequestDictionary(dictionary);
String fooValue = (String)d.get("foo");