ページの先頭行へ戻る
 Apcoordinatorユーザーズガイド

16.7 フレームの制御

ブラウザの画面をフレームに分割するには、HTMLのFRAMEタグの代わりにuji:frameタグを使用してフレームを定義します。uji:frameタグを使うことにより、FRAMEタグに比べ以下の利点があります。

アプリケーションでフレームを利用するには、画面を以下のように作成してください。

フレームと制御ページの対応関係は以下の図のようになります。

サブウィンドウを使ったアプリケーションと同様に、フレームもcom.fujitsu.uji.http.WindowControllerクラスとcom.fujitsu.uji.http.Windowクラスによって管理されます。各フレームにそれぞれWindowオブジェクトが対応し、updateメソッドでフレームの表示更新が行えます。サブウィンドウの利用法方は、“16.6 ウィンドウの制御”を参照してください。

注意

  • フレーム制御機能を使用した場合、ブラウザにおけるフレーム名(HTMLのFRAMEタグのnameアトリビュートで指定される名前)はApcoordinatorが設定します。Apcoordinatorがブラウザに設定するフレーム名は、com.fujitsu.uji.http.WindowクラスのgetIdメソッドで取得できます。

  • フレーム制御機能と初期化パラメタuji.model.viewNameを併用することはできません。

JSPの作成

uji:frameタグを使用する場合、画面の更新を行うためにはリクエストをJSP(制御ページ)で受け取るようにアプリケーションを作成してください。リクエストをサーブレットで受け取り、レスポンスとして画面(JSP)を返した場合、uji:frameタグは使用できません。

フレームの表示

フレームの表示の更新

通常は、フォームが送信されるとそのフォームが表示されているフレームが更新されます。他のフレームを更新したい場合するには2通りの方法があります。

フレーム更新中のリクエストの防止

uji:frameタグを使用した画面を表示させると、各フレームの中を表示させるために、フレームの数だけリクエストが発生します。このとき、全てのフレームの表示が同時に完了するのではなく、一部のフレームの表示が遅れる場合があります。この状態でも表示済みのフレームのボタンやリンクはユーザが操作できる状態にあるため、一部フレームの表示が未完了な状態で次のリクエストが送信される可能性があります。このようなリクエストの実行を防止するには、uji:frameタグのsyncアトリビュートにtrueを指定します。

<FRAMESET rows="50%,*">
  <uji:frame src="mainFrm.jsp" name="mainFrame" sync="true"/>
  <uji:frame src="navFrm.jsp" name="navFrame" sync="true"/>
  <NOFRAMES>
  フレーム対応のブラウザをご使用ください。
  </NOFRAMES>
</FRAMESET>

上記例の場合、mainFrm.jspとnavFrm.jspの表示が完了するまで、mainFrame, navFrameから送信されたリクエストに対しては空のレスポンス (HTTPのステータスコード204) が返されます。この結果、ビジネスクラスは呼び出されず、画面の表示も更新されません。この機能は、sync="true"を指定したフレームの間でだけ働きます。一部のフレームにsync="true"を指定しなかった場合、そのフレームからのリクエストは常に実行されます。また、そのフレームの表示が完了するのを、sync="true"が指定されたフレームは待ちません。

一定時間待っても表示が完了しなかった場合は、タイムアウトとなり本機能は自動的に解除され、表示未完了のフレームがあってもリクエストが処理されるようになります。これにより、ブラウザの停止ボタンが押された場合など、フレーム表示のためのリクエストが送信されなかった場合に、フレームからのリクエストが全く受け付けられなくなってしまうのを防ぎます。タイムアウトまでの時間はデフォルトで10秒です。この時間を変更するには初期化パラメタuji.frameSyncTimeoutにタイムアウトまでの秒数を設定してください。0を指定するとタイムアウトしません。

リクエストの検証

フレームを使用したアプリケーションでも、HttpControlStateProfileクラスとuji:controlStateタグを使用することにより、リクエストを検証することができます。リクエストの検証については、“17.1.8 リクエストの検証”を参照してください。

フレームを使用したアプリケーションの場合は、フレームに表示されるフォームそれぞれにuji:controlStateタグを記述します。正当性はフレームごとに検査されます。それぞれのフレームにおいて、最後に表示された画面からのリクエストが「正当な」リクエストとして扱われます。