intra-mart Accel Platform テーマ仕様書 第9版 2021-08-01

ThemeFilter

ThemeFilter は javax.servlet.Filter を実装した Java のクラスです。*.jsp と JSSP に対してマッピングされています。

ここでは ThemeFilter の役割と制御方法を説明します。

ThemeFilter の役割

ThemeFilter は以下の機能を持っています。

  • リクエストされたページの URL やパラメータなどをチェックし、テーマモジュールを適用するかどうかを決定します。
  • テーマモジュールを適用する場合、コンテンツに対してテーマモジュールを適切に適用し、HTMLを生成します。
  • レスポンスに、キャッシュ制御の HTTP ヘッダを付与します。

テーマモジュールを適用する条件

ThemeFilter は、コンテンツに対してテーマモジュールを適用するかどうかを決定します。 以下の条件のいずれかを満たす場合、テーマモジュールを適用します。

  • Content-Type が指定されていない
  • Content-Type が text/html である

なお、後述の テーマの適用制御 で、フラグに false を指定した場合、上記の条件に合致してもテーマモジュールは適用されません。

HTML の生成

ThemeFilter はテーマモジュールを適用する条件に合致した場合、コンテンツをバイト配列としてメモリ内に保存し、後述の PageBuilder に渡します。 ThemeFilter は PageBuilder が生成した HTML をレスポンスとして Web ブラウザに送信します。

テーマモジュールを適用する条件に合致しない場合、レスポンスの操作は行いません。 対象のサーブレット、サーブレットフィルタが生成したレスポンスがそのまま Web ブラウザに返ります。

キャッシュ制御

HTTP ヘッダに、以下のものをセットします。

  • Cache-Control: no-store
  • Pragma: no-cache

なお、後述の キャッシュ制御 で、フラグに true をセットした場合、これらの HTTP ヘッダはセットされません。

制御パラメータ

ThemeFilter には、動作を変更するためのパラメータが存在します。

キャッシュ制御

Cache-Control に no-store, Pragma に no-cache を指定するかどうかを制御します。

このパラメータを指定しない場合、または false を指定した場合、キャッシュ制御の HTTP ヘッダがレスポンスに付与されます。 true を指定した場合、キャッシュ制御の HTTP ヘッダはレスポンスに付与されません。

このパラメータは、リクエストの属性として指定してください。

JavaScript の例

function init(request) {
    //キャッシュ制御の HTTP ヘッダを出力しない
    request.setAttribute('x-jp-co-intra-mart-disable-no-cache',true);
    //キャッシュ制御を自ら行う
    let response = Web.getHTTPResponse();
    response.setHeader("Cache-Control", "private,max-age=3600");
    response.setHeader("Last-Modified", new Date(2013,9,1,13,0,0));
}

Java の例

request.setAttribute(ThemeFilter.DISABLE_NO_CACHE, true);
response.setHeader("Cache-Control", "private,max-age=7200");

テーマの適用制御

テーマモジュールを適用するかどうかを制御します。

このフラグに false を指定した場合、テーマ適用の条件に合致していてもテーマモジュールは適用されません。 true を指定した場合、テーマモジュールを適用するかどうかはテーマ適用の条件に従います。

このパラメータは、リクエストのパラメータとして指定してください。

クエリパラメータとして指定することで、一時的にテーマモジュールを適用させないで画面表示を確認する場合に使うことを想定しています。

http://xxx.xxx.xxx/imart/test?x-jp-co-intra-mart-apply-theme=false

PageBuilderの制御

セッションをスコープとした PageBuilder のビルダーモジュールを指定します。

通常は、リクエストをスコープとしてビルダーモジュールが決まりますが、このパラメータを指定するとセッションをスコープとしてビルダーモジュールを指定できます。これは、外部メニューに指定された intra-mart Accel Platform の画面を現在のテーマで表示するためのパラメータです。

このパラメータは、リクエストのパラメータとして指定してください。

<form action="somewhere">
    ...
    <input type="hidden" name="imui-session-scope-builder-module" value="headwithcontainer"/>
    ...
</form>