エラー発生時の対応を考える
続いて、エラー発生時の対応についてです。Apache Clickでは、実行中にエラーが発生すると、独自のエラーページが表示されます。これはApache Clickに最初から用意されているものです。これを独自の表示にカスタマイズしたい、ということもあるでしょう。
Apache Clickでは、実行時にエラーが発生すると、org.apache.click.util.ErrorPageというPageクラスによるWebページにジャンプします。これはclick/error.htmというURLにマッピングされています。従って、このページを独自に作成して使用するように変更すれば、エラー発生時の対応を自身で作成できます。
まず、click.xmlを開き、エラー時のページ情報を追加しておきましょう。次のように修正してください。
<?xml version="1.0" encoding="UTF-8"?> <click-app charset="UTF-8"> <pages package="jp.codezine.click"> <page path="click/error.htm" classname="ErrorPage"/> </pages> </click-app>
ここでは、<pages>内に新たに<page>タグが追加されていますね。path="click/error.htm"に"ErrorPage"というクラスを設定しています。これにより、何らかの例外が発生したときにはclick/error.html"にアクセスするようになっています。これらにはそれぞれPageクラスとテンプレートを用意します。
error.htmの作成
では、エラーページを作成しましょう。まずはerror.htmテンプレートファイルからです。これは、次のようにしておきましょう。
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Error</title> <link rel="stylesheet" type="text/css" href="style.css"></link> $imports </head> <body> <h1>Error Page</h1> <p>※何らかの問題が発生しました。管理者までお問い合わせください。</p> <p>メッセージ:$msg</p> </body> </html>
ごくシンプルなものです。$msgとして、Pageで発生した例外のメッセージを表示するようにしてあります。
ErrorPageクラスの作成
続いて、Errorクラスの作成です。これもjp.codezine.clickパッケージに「ErrorPage.java」とソースコードファイルを作成し、次のように記述をしましょう。
package jp.codezine.click; public class ErrorPage extends org.apache.click.util.ErrorPage { public String msg=""; @Override public void onInit() { super.onInit(); String msg = this.getError().getLocalizedMessage(); } @Override public String getTemplate() { return "/error.htm"; } }
Pageクラスで何らかの例外が発生すると、このWebページにジャンプし、エラーメッセージが表示されます。
エラー時に表示されるPageクラスは、org.apache.click.util.ErrorPageとして用意されています。独自にページを作成する場合は、このページを継承してPageクラスを作成するのが良いでしょう。
ここでは、「getTemplate」というメソッドをオーバーライドしています。これは、このPageインスタンスで使用するテンプレートを得る際に呼び出されるもので、ここで"/error.htm"を返すことで、error.htmがテンプレートとしてロードされるようになります。
まとめ
今回は、Webアプリケーションを使う上で必要となるさまざまな機能を紹介していきました。だいぶApache Clickによる開発スタイルがわかってきたことでしょう。Apache Clickは、コンポーネント指向の強いフレームワークです。さまざまな機能の実装は、「用意されている部品の中からどれを利用すればいいか」「どういう機能を呼び出せばいいか」といったことを中心に考えていくことになります。
中には、DateFieldのように2.1にならないと本来の機能が発揮できないものや、リダイレクト時のMap受け渡しのように何らかの処理をしないと日本語で問題が起こるものなどもあります。Apache Clickは、まだ発展途上のフレームワークですので、バージョンアップにより仕様が変更されたりすることもあります。開発元サイトをこまめにチェックするようにしましょう。