UIX開発者ガイド | ![]() 目次 |
![]() 前へ |
この付録ではJDeveloper 9.0.2からのUIXに対する変更点を説明します。ここでは、次の項目について説明します。
汎用UIXフレームワークでは次のような領域が改善されました。
エンド・ユーザーはほとんどのWebページで、ページのある一部が更新されるようなアクションを実行することができます。たとえば、ボタンをクリックすると新しい行が表データに追加されるような場合です。もしくは、値リストから項目を選択することによって、ページ内の他のコンポーネントが非表示になったり、表示されたり、ユーザーの選択肢に基づく新しい値が移入されたりする場合もあります。これらのアクションは、ユーザーが現行ページを離れまったく新しいページに移動するような通常のナビゲーションとは異なります。そのアクションを実行した後は、かぎられた変更のみを反映して同じページが再表示されるのです。現在のUIXベースのアプリケーションでは、カスタムJavaScriptコードを記述するか全ページ・リフレッシュを実行して、このような機能性を実装する必要があります。この方法は両方とも問題があります。
カスタムJavaScriptコードを記述することによって、アプリケーションは対話性がより向上したユーザー操作を提供できます。ただし、このような機能性の実装を各アプリケーションで必須にすると、開発リソースがムダに消費されエラーも起こりやすくなります。また、純粋なクライアント側JavaScriptソリューションは、一般的にすべての最新の値に関する知識が必要となるため、かぎられた場合にしか使用されません。たとえば、ユーザーの選択に応じて依存フィールドを更新するとき、依存フィールドのすべての可能な値が、ページの最初のレンダリング時にブラウザに送信される必要があります。これによって、エンド・ユーザーが見たこともないデータの問合せがしばしば必要になるため、ページ・サイズは大きくなりページ生成時間も遅くなります。
最も単純なソリューションは、アプリケーションがユーザー・アクションに応じて全ページ・リフレッシュを実行することです。このソリューションは実装がはるかに容易ですが、完全リフレッシュの実行は効率的ではありません。ページのごく一部がユーザー・アクションによる影響を受けるときでも、全ページ・リフレッシュでは、変更されないクロムや周囲コンテンツもすべて含めてページ全体が再生成されます。結果として、全レンダリングが終了するまで空白ページがずっとユーザーに表示されることになります。さらに不都合なことに、新しいページがロードされた直後、ブラウザはデフォルトでページ最上部までスクロールして戻ります。結果的に、ユーザーは前後関係を見失い、それまでの作業がわからなくなります。
部分ページ・レンダリングは、これらのソリューションのより重大な欠点のいくつかを回避する一方、両者のいくつかの利点も提供します。部分ページ・レンダリングを起動するアクションをユーザーが実行すると、ページのある一部が再レンダリングされる必要があることを示すリクエストが、アプリケーションに対して送られます。アプリケーションはページのこの部分のみを再生成し、ページにマージしなおすためこの新しい部分コンテンツをブラウザに送信します。
部分ページ・レンダリングは他のソリューションよりもいくつかの利点があります。
UIX 9.0.3ではこの機能性が提供され、アプリケーション開発者が追加作業を行う必要もありません。部分ページ・レンダリングを可能にするコア・テクノロジを提供する以外に、UIX 9.0.3は、部分ページ・レンダリングを透過的に有効にするためUIXのTableBeanやHideShowBeanなどの既存コンポーネントも強化します。将来のリリースではより多くのコンポーネントがサポートされる予定です。部分ページ・レンダリングはMozilla 1.0やNetscape 7.0だけでなくInternet Explorer 5.5以上でもサポートされていますが、旧バージョンのブラウザでは通常、全ページ・レンダリングが処理されます。
Strutsフレームワークは、現在ではJ2EE Webアプリケーションを構築するための最も一般的なフレームワークの1つです。Strutsの開発者はページにJSPを頻繁に使用しますが、Strutsでは別の表示テクノロジの使用もサポートされています。UIX 9.0.3で提供される一連の拡張機能により、Strutsアプリケーションの一部またはすべてに対してuiXMLを使用できます。また、標準的なStrutsのアクション、ActionForm Beansおよび構成ファイルをすべて使用して、uiXMLベースのアプリケーションを制御できます。詳細は、UIX開発者ガイドの新しいトピックである「Strutsを利用したuiXMLの使用方法」を参照してください。
新規のuix-config.xml
ファイルを使用すると、開発者はコード行を記述せずにConfigurationオブジェクトのセットを作成し、コードを再コンパイルせずにフィールドの構成プロパティを更新できます。この特長はサーブレット2.1以上を使用している開発者のみに適用されるため、Apache JServにデプロイされたアプリケーションでは引き続きJavaコードを使用する必要があります。
標準のWEB-INF
ディレクトリに保存されているuix-config.xml
ファイルでは、Configurationオブジェクトには設定されないいくつかのプロパティの構成も可能です。特に重要なのは、UIExtensions
およびUITテンプレート・ライブラリの自動登録をサポートすることです。また、9.0.2では簡単に利用できなかったいくつかのデバッグ機能(適切にインデントされたHTMLなど)への直接的アクセスも提供されます。このファイルの特長および書式の詳細は、UIX開発者ガイドの改訂された「構成」トピックを参照してください。
UIXのデータ・バインド・アーキテクチャはJavaBeansとの親和性が非常に高くなりました。この変更は汎用的なもので、Java API、uiXMLインタフェースおよびUIX JSPタグ・ライブラリなどにも反映されます。
以前uiXMLやJSPタグでDataObject
が必要だった場所ではどこでも、開発者がJavaBeansインスタンスを渡すと、UIXでは自動的にメソッド(およびpublic変数)のイントロスペクションが行われプロパティが検出されます。UIXでは、(HashMap
やHashtable
などの)java.util.Map
インタフェースを実装するオブジェクトも自動的にサポートします。以前uiXMLやJSPタグでDataObjectList
が必要だった場所ではどこでも、開発者が配列またはjava.util.List
(ArrayList
やVector
など)を渡すと、UIXでは透過的にそのオブジェクトをDataObjectList
に変換します。
プロセスは再帰的です。このため、それ自身がBeansであるBeanプロパティはDataObject
を含むDataObject
に自動的に変換され、Beans配列は自動的にDataObjectList
に変換されます。
最後に、MethodDataProvider
はもうDataObject
を返す必要はありません。どのようなオブジェクトが返されても、前述したようにUIXが適用を実行します。
UIXは、この自動イントロスペクションに必要なより負荷の高いオブジェクトを大量にキャッシュします。このため、パフォーマンスは通常は適用範囲内ですが、特に重要なデータソースのパフォーマンスについては開発者が最適化できるような機能がUIXには用意されています。
この新機能の詳細は、UIX開発者ガイドの「データ・バインド」トピックの「より簡単な方法: Beansへのバインド」を参照してください。
新しい<lovInput>
および<listOfValues>
コンポーネントによって強力な値リストをはるかに容易に出力できるようになり、これらは部分ページ・レンダリングと統合されます。
<sideBar>
、<styledList>
および<styledItem>
の3つの新しいコンポーネントによって、以前の<sideNav>
コントロールで提供されたものよりはるかに豊富な、ページのサイド・ナビゲーション領域を構築するオプション・セットが提供されます。<hideShow>
は、<sideBar>
の内部で使用できる新しいselected属性もサポートします。
<hideShow>
は、表示/非表示コントロールのデフォルト・ラベルを置き換えられる、新しい子<prompt>
もサポートします。
<pageLayout>
には他にもコンテンツを挿入できる6つのスロットがあります。
<pageButtons>
<returnNavigation>
<footnote>
<pageStatus>
<userInfo>
<about>
<pageLayout>
は、メッセージ表示ページを構築するmessageType
属性もサポートします。
<switcher>
は、いくつかの共通するケースを記述しやすくする子<default>
をサポートします。
<displayException>
要素を<try>
/<catch>
の内部で使用すると、問題のデバッグについてより詳しい情報を得ることができます。
メッセージ・テキストにはHTML書式設定タグの固定セットが含まれるようになりました。これは、メッセージ・ボックスに表示されるテキストと、UIXメッセージBeansのmessage
およびtip
属性として表示されるテキストのみをサポートします。
指定されたメッセージが書式設定情報を含むことを示すためには、メッセージが<html>
で始まり、</html>
で終わる必要があります。たとえば、文中の1つの単語を太字にする場合、メッセージは次のようになりました。
String messageString = "<html>One word <b>here</b> is bold.</html>";
新しい<formattedText>
コンポーネントを使用すると、ページ上のどこででもこの機能性を利用できます。開始と終了に<html>
も必要ありませんが、これが含まれていても問題はありません。
次のHTMLの要素、属性およびエンティティがサポートされています。
<br>
<hr>
<li>, <ol>, <ul>
<p>
<b>
<i>
<tt>
<big>
<small>
<pre>
<span>
<a>
class
style
href
<
>
&
®
©
"
このリストにない要素、属性およびエンティティは、自動的にコンテンツから取り除かれ無視されます。これによって、書式設定されたテキストがブラウザ以外のデバイスで適切にレンダリングされます。また、RAW HTMLを介した出力コードに存在する可能性があるセキュリティ・ホールのリスクも回避できます。入力HTMLが変更されずに出力されるという保証はありません。たとえば、入力テキストでは開いたままであっても、パラグラフとリスト項目要素はいつも閉じられます。他のHTMLマークアップが、現在のルック&フィールまたはユーザー・エージェントにより適切な出力で置き換えられる場合があります。
<media>
コントロールメディア・コントロールは、ユーザー・エージェントに埋め込まれたプレーヤにオーディオ、ビデオまたはイメージなどのメディア・コンテンツを表示します。メディア・コントロールは、source
属性で指定されたメディアを適切なメディア・プレーヤで表示します。特定のメディア・プレーヤが求められている場合は、player
属性を使用して指定できます。メディア・コントロールは、プラットフォーム間のメディア表示に関する2つの微妙な観点を論理的に処理します。2つの点とは、メディアの表示に最適なプレーヤの決定と、メディア・プレーヤのサイズ設定です。
メディア・コントロールは、次の手順で適切なメディア・プレーヤを選択します。
player
属性で指定されていて、そのプレーヤがユーザー・エージェントで使用可能でありメディア・リソースを表示できる場合、そのプレーヤが使用されます。UIX 9.0.3では新しい「ファセット」という概念がサポートされています。ファセットはルック&フィールの可変値です。9.0.3でサポートされているファセットの1つがprintableファセットで、これはページ周囲のクロムのほとんどを削除することによって出力を印刷用に最適化します。ファセットは、プログラムによって設定することも、uiXML内で宣言的に設定することもできます。
<button ctrl:event="printMe"/>
...
<handlers>
<event name="printMe">
<showFacet name="printable"/>
</event>
</handlers>
この他にUIX 9.0.3では、標準的なUIXページの印刷性に影響する問題を修正します。
Pocket PCは現在サポートされているプラットフォームの1つです。すべてのコンポーネントがサポートされているわけではなく、サポートされているコンポーネントのすべての属性がサポートされているわけでもありません。UIX要素リファレンスではサポートされていない属性およびコンポーネントが示されています。
MacOSのInternet Explorer 5のレンダリングは大幅に改善され、このプラットフォームは現在、完全にサポートされています。
右から左方向の言語におけるレンダリングの質も改善されましたが、これは今現在、Windows上のInternet Explorerでのみサポートされています。
HTMLサイズは多数の共通ケースで大幅に改善されました。新しいアクセシビリティ・モード機能を使用すると、あるユーザー向けにはアクセシビリティ機能を無効にしてHTMLサイズをより小さくすることができます。
フォームを送信できるコンポーネントはすべてunvalidated
属性をサポートするようになりました。(9.0.2では一部でしかサポートされていませんでした。)
読取り専用の複数行の<textInput>
は、外観が大幅に改善されました。
9.0.2のUIXにはjava.lang.String
に対する多数のブラインド・キャストが含まれていました。現在はより正確にするためtoString()
が使用されています。
カレンダ・ダイアログへの修正では、タイムゾーンおよび開始日に関する以前の問題も修正されています。
UIX Controllerは、例外の根本的原因をそのまま甘受しないという面で改善されています。実際には、ユーザーがより詳細なエラー・メッセージを受け取る場合があることを意味しています。
BC4J uiXMLでは次のような領域が改善されました。
<bc4j:rowStamp>
要素<bc4j:attrValue>
要素<bc4j:option>
要素および<bc4j:optionList>
要素<bc4j:rowStamp>
要素UIXではビュー・オブジェクトの行の反復処理が簡単になりました。<bc4j:rowStamp>
要素は<bc4j:viewObjectScope>
内部に配置でき、行ごとにコンテンツを1回スタンプします。
<bc4j:viewObjectScope name="yourVO">
<bc4j:rowStamp>
One of these per row!
</bc4j:rowStamp>
</bc4j:viewObjectScope>
これはBC4J uiXMLに対して最も望まれていた機能拡張でした。
<bc4j:attrValue>
要素<bc4j:attrScope>
を使用せずに属性値に対してバインドすることが可能になりました。1つのUIX要素の2つの属性を、BC4J行の2つの別の属性にバインドできます。
<link>
<boundAttribute name="text">
<bc4j:attrValue name="textAttr"/>
</boundAttribute>
<boundAttribute name="destination">
<bc4j:attrValue name="urlAttr"/>
</boundAttribute>
</link>
これはBC4J uiXMLに対して2番目に望まれていた機能拡張でした。
<bc4j:option>
要素および<bc4j:optionList>
要素UIXでは<bc4j:rowStamp>
および<bc4j:attrValue>
を利用して、新しい<bc4j:option>
要素および<bc4j:optionList>
要素を組み込むようになりました。これらの新しい要素によって、使用可能なオプションをビュー・オブジェクトから動的にロードする、選択肢およびリストの構築がはるかに容易になります。次に例を示します。
<bc4j:choice attrName="job">
<bc4j:contents>
<bc4j:optionList voName="JobListVO"
attrName="jobId"
textAttrName="jobName"/>
</bc4j:contents>
<bc4j:choice>
UIX 9.0.3では、BC4J interMediaのサポートを追加することでBC4Jデータ・バインドが改善されています。これを使用すると、豊富なマルチメディア・コンテンツをデータベースに直接格納し、BC4J interMediaドメインを介してUIXページに表示することができます。UIXのビルトイン・サポートによって、特にイメージ、オーディオおよびビデオなどのタイプに対するいくつかのuiXML要素が新しく追加されています。この機能の詳細は、UIX開発者ガイドの新しいトピックである「メディア」を参照してください。
UIX 9.0.2では、BC4J uiXMLと相互に作用するデータ・プロバイダおよびイベント・ハンドラでJavaコードを記述するのは困難でした。2つの新しいクラス、UIBindingUtils
およびServletBindingUtils
によってこれが非常に容易になります。これらのクラスによって、RenderingContext
またはBajaContext
から、現在のスコープ内のAttributeDef
、Row
、ViewObject
またはApplicationModule
に移動することができます。
UIXは新しい .cpxデータ定義ファイル形式をサポートするようになりました。開発者は、(configName
およびdefFullName
を設定するのではなく)<bc4j:rootAppModuleDef>
の新しいdefinition
属性で、名前付き定義を使用するように設定できます。
UIXでの数字の解析および書式設定の際における、正しい小数点およびグループ・セパレータの使用がはるかに改善されました。
また、正しくローカライズおよびカスタマイズされたエラー・メッセージが使用されるようになりました。ただし、この機能を利用する開発者は、旧バージョンのフォームにおける次のような<catch>
ブロックをすべて変更する必要があります。
<try>
...
<catch>
<header messageType="error">
<boundAttribute name="text">
<contextProperty select="ui:currentThrowable"/>
</boundAttribute>
</header>
</catch>
</try>
これを次のように変更します。
<try>
...
<catch>
<displayException/>
</catch>
</try>
<bc4j:findByExample>
要素はSQLと同様の比較のみをサポートしていました。新しいcomparison
属性をequals
に設定して等価性の比較を使用できます。
uiXMLの改善点についてはほとんど前述しましたが、その他に次のような点があります。
<mailTo>
バインド値はmailto:
URLを(件名やcc:リストの設定など、全バリエーションとともに)生成します。
<ctrl:pageURL>
要素によって、データ・バインドURLが生成しやすくなりました。
<dataObject>
の属性など)が、現在はデータ・バインド可能です。
UIX JSPタグは、以前XMLおよびJavaに制限されていた機能のほとんどをサポートしています。次に例を示します。
DataObject
に対するデータ・バインドのサポート。
ServletRequest
、PageContext
、ServletContext
およびHttpSession
属性へのアクセスに対する名前付きDataObject
のビルトイン。
UINode
要素のサポート。
UINode
要素タイプにおけるスクリプト可能な変数のサポート。
<uix:boundMessage>
、<uix:tableFormat>
、<uix:columnFormat>
および<uix:bundle>
タグのサポート。
<uix:contents childDataBinding="...">
による要素の子のバインドのサポート。
<uix:renderingContext>
で使用されたConfigurationの直接指定のサポート。
<uix:xml>
要素。
その他の改善点として、次のものがあります。
これらの新しい機能の追加にもかかわらず、UIXは広範囲の下位互換性を保持しています。ただし9.0.2タグ・ライブラリの一部の動作については互換性を保持できませんでした(機能は完全にスーパーセットとなっています)。特に、id
属性の値にはもう空白が含まれません。