Click Frameworkベストプラクティス-テンプレート、メニュー、ログ、エラー処理
4101 ワード
かたわく
テンプレートの使用を強くお勧めします.テンプレートには、次のようなメリットがあります.メンテナンスが必要なHTML数を大幅に削減 アプリケーションに共通のlook and feel があることを確保するグローバルアプリケーションの変更を容易にする テンプレートの使用方法については、Page Templatingおよび適用例を参照してください.
メニュー
多くのアプリケーションでは、Menu集中制御ページのナビゲーションが使用されています.メニュー項目はWEB-INF/menu.xmlで定義されており、変更しやすい.
メニュー項目は通常borderテンプレートで定義され、アプリケーション全体で使用できます.メニュー制御ではHTMLレンダリングはサポートされていないため、メニューをレンダリングするためにVelocityマクロを定義する必要があります.borderテンプレートでこのマクロを呼び出す
マクロを使用してあなたのメニューを表示するメリットの一つは、異なるアプリケーションでこのコードを再利用し、メニューを変更し、WEB-INF/menu.xmlを簡単に編集することです.マクロをルートディレクトリの下にあるmacro.vmファイルに定義すると、Clickによって自動的にロードされます.
マクロを使用してダイナミックメニューを作成し、isUserInRoles()を使用してユーザーがアクセスできるように許可されたメニュー項目のみを表示します.
JavaScriptを使用する動的な動作を表現することもできる、ドロップダウンメニューのように、Menuページを参照してClick Examplesにある.
ログ#ログ#
ページ・ログにはLog4jが使用されます.もう1つの代替はCommons Loggingである.Commons Loggingを使用する場合は、一部のアプリケーションサーバでクラスローダに関する問題が発生し、最新バージョンが使用されていることを確認してください.
ベースクラスでloggerを定義するのが望ましい:
このモードでは、getLogger()メソッドを使用できるように、BasePageクラスを継承する必要があります.
大量のdebug情報がある場合は、isDebugEnabledを使用して呼び出すべきかどうかを制御する必要があります.
注意Clickのログ機能は、アプリケーションのために設計されたものではなく、内部でのみ使用されます.プロセス状態で実行しても、Clickはログ出力を生成しません.
エラー処理
処理されていないエラーはErrorPageに転送されます.追加の処理ページが必要な場合は、WEB-INF/click.xmlで作成して定義する必要があります.
通常、トランザクション・エラーはサービス・レイヤまたはservlet Filterを介して処理され、エラー処理ロジックは含まれてはならない.
カスタム・ログにエラー・ページを使用する可能性があります.
例えば、アプリケーションが処理されていないエラーがシステム.outではなくアプリケーションログに記録される場合、ErrorPageは構成されるべきである.たとえば、エラーのログページを記録します.
テンプレートの使用を強くお勧めします.テンプレートには、次のようなメリットがあります.
メニュー
多くのアプリケーションでは、Menu集中制御ページのナビゲーションが使用されています.メニュー項目はWEB-INF/menu.xmlで定義されており、変更しやすい.
メニュー項目は通常borderテンプレートで定義され、アプリケーション全体で使用できます.メニュー制御ではHTMLレンダリングはサポートされていないため、メニューをレンダリングするためにVelocityマクロを定義する必要があります.borderテンプレートでこのマクロを呼び出す
#writeMenu($rootMenu)
マクロを使用してあなたのメニューを表示するメリットの一つは、異なるアプリケーションでこのコードを再利用し、メニューを変更し、WEB-INF/menu.xmlを簡単に編集することです.マクロをルートディレクトリの下にあるmacro.vmファイルに定義すると、Clickによって自動的にロードされます.
マクロを使用してダイナミックメニューを作成し、isUserInRoles()を使用してユーザーがアクセスできるように許可されたメニュー項目のみを表示します.
#if ($menu.isUserInRoles())
..
#end
JavaScriptを使用する動的な動作を表現することもできる、ドロップダウンメニューのように、Menuページを参照してClick Examplesにある.
ログ#ログ#
ページ・ログにはLog4jが使用されます.もう1つの代替はCommons Loggingである.Commons Loggingを使用する場合は、一部のアプリケーションサーバでクラスローダに関する問題が発生し、最新バージョンが使用されていることを確認してください.
ベースクラスでloggerを定義するのが望ましい:
public class BasePage extends Page {
protected Logger logger;
public Logger getLogger() {
if (logger == null) {
logger = Logger.getLogger(getClass());
}
return logger;
}
}
このモードでは、getLogger()メソッドを使用できるように、BasePageクラスを継承する必要があります.
public class CustomerListPage extends BasePage {
public void onGet() {
try {
..
} catch (Exception e) {
getLogger().error(e);
}
}
}
大量のdebug情報がある場合は、isDebugEnabledを使用して呼び出すべきかどうかを制御する必要があります.
public class CustomerListPage extends BasePage {
public void onGet() {
if (getLogger().isDebugEnabled()) {
String msg = ..
getLogger().debug(msg);
}
..
}
}
注意Clickのログ機能は、アプリケーションのために設計されたものではなく、内部でのみ使用されます.プロセス状態で実行しても、Clickはログ出力を生成しません.
エラー処理
処理されていないエラーはErrorPageに転送されます.追加の処理ページが必要な場合は、WEB-INF/click.xmlで作成して定義する必要があります.
<pages package="com.mycorp.page" automapping="true"/>
<page path="click/error.htm" classname="ErrorPage"/>
</pages>
通常、トランザクション・エラーはサービス・レイヤまたはservlet Filterを介して処理され、エラー処理ロジックは含まれてはならない.
カスタム・ログにエラー・ページを使用する可能性があります.
例えば、アプリケーションが処理されていないエラーがシステム.outではなくアプリケーションログに記録される場合、ErrorPageは構成されるべきである.たとえば、エラーのログページを記録します.
package com.mycorp.page.ErrorPage;
..
public class ErrorPage extends net.sf.click.util.ErrorPage {
public void onDestory() {
Logger.getLogger(getClass()).error(getError());
}
}