別のブラウザで表示すると、JavaScriptによってこのドキュメントの表示形式が変わる場合があります。ただしドキュメントの内容に影響はありません。

UIX開発者ガイド Go to Table of Contents
目次
Go to previous page
前へ
Go to next page
次へ

24. モバイル・アプリケーションの記述

UIXの目標の1つは、異なるデバイスに同じページ記述テクノロジを提供することです。このトピックでは、UIXを使用してモバイル・アプリケーションを記述する方法を説明します。

UIXは現在、Pocket PCのInternet Explorerでサポートされています。将来はPalm用ブラウザもサポートされる予定です。携帯電話またはポケベルは現在サポートされていません。これらは将来iAS Wirelessと組み合せてサポートされる予定です。

ここでは、次の項目について説明します。

概要

UIXによるモバイル・アプリケーションの記述方法は、UIXによるデスクトップ・アプリケーションの記述方法とほとんど同じです。次の例でこれを示します。

<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-1: デスクトップ・ブラウザ
uiXML rendered in web browser

図23-2: PDAブラウザ
uiXML rendered in PDA

UIの考慮

異なるデバイスに同じページ記述テクノロジを提供することはUIXの目標の1つですが、これは、開発者が「一度書けばどこでも動く」ことを可能にするという意味ではありません。その理由を次に示します。

PDA向けに設計されたページが比較的シンプルならばそれが最適に見え、デスクトップ向けに設計されたページはPDAに対しては大きすぎるように見えるのは、明らかです。この例で示したような理由から、UIXは、異なるデバイスに同じUIXページを使用するのではなく、異なるデバイスに1つのページ記述テクノロジを提供することを目標にしているのです。

エージェント・タイプ

前述した「概要」セクションの例は、リクエストを行うデバイスによって出力が変更されることを示しています。たとえば、デスクトップ・ブラウザではページ・ボタンが繰り返され右寄せされていますが、PDAでは1回レンダリングされて左寄せされています。デバイスは次の3つのタイプにグループ分けされます。

開発者は特定のエージェント・タイプを念頭に置いてページを記述します。実際は多くのページが複数のエージェント・タイプで稼働しますが、これはいつもあてはまるわけではありません。指定されたエージェント・タイプについて、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>

ターゲットとしてのPDA

スクリプト

開発者はJavaScriptサポートに依存することはできません。PDAブラウザはJavaScriptをサポートする方向ですが、多くのブラウザはまだサポートしていません。スクリプトBeanはJavaScript対応ブラウザにおけるユーザーの操作性を強化するためにサポートされていますが、スクリプトが有効でないためにアプリケーションがエラーを起こすことは回避すべきです。

通常これは、クライアント側の検証を行う場合にJavaScriptに依存しないことを意味します。開発者はいつもサーバー側の検証を行っているはずですが、これはモバイル・アプリケーションにとって絶対的に必要なものです。

コンポーネントのサポート

次に示すリストは、デスクトップ・マシンとPDAでサポートされているものの違いを表しています。これは完全なリストではありません。コンポーネント固有のドキュメントには、PDAでサポートされていない属性または子(あるいはその両方)すべての情報が含まれています。

次のコンポーネントはサポートされていません。コンポーネントもその子もレンダリングされず、警告がエラー・ログに記述されます。

次のコンポーネントは無視されます。これらはページの正しい動作に不可欠ではないため、警告はログに記述されません。

次のコンポーネントはそれ自身では何もレンダリングしませんが、索引付けされた子をレンダリングします。

次のコンポーネントはPDAでサポートされています。ただしそれらの動作は、言及する価値が十分にあるほど、デスクトップ・マシンでの動作とはかけ離れています。

ブラウザ・ルック&フィール(BLAF)のページ・ナビゲーションを使用していた開発者は、おそらく次の事実にとまどうはずです。

実際上すべてのBLAFページがページ・ナビゲーションのためにTabBar、GlobalHeader、SideNavまたはSideBar(あるいはそのすべて)を使用するため、モバイル版アプリケーションに個別のUIXページが必要なことは明らかです。PDAへのOracleルック&フィールの実装を試行する開発者は、PDAにおけるページ・ナビゲーションの実装方法についてOracleモバイルUI仕様を調べる必要があります。

パラメータのデコード

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");