Click Frameworkベストプラクティス-テンプレート、メニュー、ログ、エラー処理


かたわく
テンプレートの使用を強くお勧めします.テンプレートには、次のようなメリットがあります.
  • メンテナンスが必要なHTML数を大幅に削減
  • アプリケーションに共通のlook and feel
  • があることを確保する
  • グローバルアプリケーションの変更を容易にする
  • テンプレートの使用方法については、Page Templatingおよび適用例を参照してください.
     
    メニュー
    多くのアプリケーションでは、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());
        }
    }