Wicket 条件でhtml等のリソースファイルの切り替えをする


最近、Wicket で UserAgentによりページテンプレートの切り替えをできないか調べていました。
調べた結果、できそうなのではあり、いくつか方法がありましたので記載します。


方法1 getVariation を使う

これが最も簡単なやり方で、用途もいろいろ使えるかと思いました。
ページ単位に独自制御できます。
リンク先にサンプル実装もあったので、リンクを記載します。

14 Internationalization with Wicket 6.x に記載がありますが、Locale とセットで使用すると、
org.foo.MyBundle_zh_cmn を取得する動作になり、どちらの設定も考慮する動作になっています。


方法2 ResourceStreamLocator を使う

How to change the html file location in Wicket に記載がありますが、
WebApplication内で

getResourceSettings().setResourceStreamLocator(new MyOwnStreamLocator());
することで、リソースのパスを切り替えることができます。
Mobile / PC で HTML 切り替えたくて、全ページに適用するなどの場合は、StremLocator が使えるのかと思います。
Wicket 7.8.0 でもこの方法を使用できました。
ユーザーエージェントの考慮などをStreamLocatorに実装しても良さそうです。

以下、他参考記事へのリンクになります。


方法3 ResourceFinder を追加する

Locator が、リソースを探すロジック切り替えるのに対して、こちらは探しにいくロジックを切り替えます。
ResourceStreamLocatorlocateメソッド内で、Finderを使って探しにいってますので、ResourceStreamLocator の継承クラス内では、明示的に呼び出さないとResourceFinderが効いてこない作りになっていました。
wicket/ResourceStreamLocator.java at master · apache/wicket
ResourceFinder は、Locator の実装は変えないが、デフォルトとは別の場所に置く際に使うものだと思われます。

以下、他参考記事へのリンクになります。

以上です。

コメント

カテゴリー