playframework1‎ > ‎routes‎ > ‎

pukiwikiとの連携

http://localhost/ でplayで作成したアプリケーションを動かし、
http://localhost/help/ にpukiwikiを稼働させてアプリケーションのヘルプ機能として活用することを考えます。
 
pukiwikiで任意のページを開きたいときは、http://localhost/help/index.php?keyword のようにページ名を引数として渡します。
pukiwikiをutf-8で動かしておけば、このURL生成をplayframeworkに半分任せることができます。
 
routesファイル

# for help
GET     /help/index.php?{page}                  Helper.help


開きたいページが事前に分かっているならこんな感じで記述することができます。
<a href="@{Helper.help('トランジスタ')}">トランジスタとは</a>

例えばアクションに応じたヘルプページを開くリンクを得たいときは下記のようにします。
(request.actionには、"Application.index"のような文字列が入ります)
Map<String, Object> map = new  HashMap<String, Object>();
map.put("page", request.action);
String helpLink = Router.reverse("Helper.help", map).url;
render(helpLink);

こんな感じでURL逆生成したURLを使ってりんくを埋め込めばOKです。
<a href="${helpLink}">このページについての説明</a>

URL逆生成で得られるのはパスだけですので、外部のPukiwikiへ飛ばしたいときは以下のように外部URLと結合してください。
<a href="http://wiki.example.com${helpLink}">Pukiwikiを開く</a>

あと、Pukiwikiへのパス設定が無効だった場合は、標準Routesでは次のようなクラス、メソッドを呼び出そうとします。
Helper.java

public class Helper extends Controller {

    public static void help(final String page) { }
}
準備しておけばエラーページへジャンプしたり案内を表示したりするようにしておくフォローができます。
 
今のところ判明している問題は、ページ名に半角スラッシュが入っているとURL逆生成が意図通りに動きません。
そのようなページ名にならないように注意する必要があります。