`

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。另一个可替换的是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;
    }
} 

 使用这个模式,都应继承BasePage类,以至于可以使用getLogger()方法。

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的日志功能不是为应用设计的,而仅是为内部使用。在production状态下运行时Click不会产生任何日志输出。

 

错误处理

未被处理的错误会被转发到ErrorPage上显示。如果需要额外的处理页面,需要创建并在WEB-INF/click.xml中定义。

<pages package="com.mycorp.page" automapping="true"/>
  <page path="click/error.htm" classname="ErrorPage"/> 
</pages> 

 通常处理事务错误在service层或者通过servlet Filter并且不应在其中包含错误处理逻辑。

可能为定制日志使用错误页面。

例如应用需要未被处理的错误被记录到应用日志中(而不是System.out),那么ErrorPage应该被配置。例如记录错误的日志页面:

package com.mycorp.page.ErrorPage;
..

public class ErrorPage extends net.sf.click.util.ErrorPage {
	
    public void onDestory() {
    	Logger.getLogger(getClass()).error(getError());
    }
} 

 

 

分享到:
评论
2 楼 bill.end 2009-03-18  
elvishehai 写道
你我的思想有别啊

? 此话怎讲?
1 楼 elvishehai 2009-03-17  
你我的思想有别啊

相关推荐

    C# WinForm实例源码

    此外,你可能还会发现一些高级主题,如自定义控件的创建、菜单和工具栏的使用、对话框的集成(比如OpenFileDialog和SaveFileDialog),以及异常处理和错误日志记录等最佳实践。这些都是构建专业级WinForm应用必不可...

    VS2005项目打包和部署的详细教程

    9. **错误处理与日志记录**:在部署版本中,包含适当的错误处理代码,以捕获运行时可能出现的问题,并记录日志文件,便于后期分析和调试。 10. **更新策略**:如果你使用了ClickOnce部署,可以设置自动更新,这样当...

    ASP.NET 3.5 开发大全11-15

    1.3.7 错误列表窗口 1.4 安装SQL Server 2005 1.5 ASP.NET应用程序基础 1.5.1 创建ASP.NET应用程序 1.5.2 运行ASP.NET应用程序 1.5.3 编译ASP.NET应用程序 1.6 小结 第2章 C# 3.0程序设计基础 2.1 C#程序 2.1.1 C#...

    ASP.NET 3.5 开发大全1-5

    1.3.7 错误列表窗口 1.4 安装SQL Server 2005 1.5 ASP.NET应用程序基础 1.5.1 创建ASP.NET应用程序 1.5.2 运行ASP.NET应用程序 1.5.3 编译ASP.NET应用程序 1.6 小结 第2章 C# 3.0程序设计基础 2.1 C#程序 2.1.1 C#...

    ASP.NET3.5从入门到精通

    1.3.7 错误列表窗口 1.4 安装SQL Server 2005 1.5 ASP.NET 应用程序基础 1.5.1 创建ASP.NET 应用程序 1.5.2 运行ASP.NET 应用程序 1.5.3 编译ASP.NET 应用程序 1.6 小结 第 2 章 C# 3.0 程序设计基础 2.1 C#程序 ...

    ASP.NET 3.5 开发大全

    1.3.7 错误列表窗口 1.4 安装SQL Server 2005 1.5 ASP.NET应用程序基础 1.5.1 创建ASP.NET应用程序 1.5.2 运行ASP.NET应用程序 1.5.3 编译ASP.NET应用程序 1.6 小结 第2章 C# 3.0程序设计基础 2.1 C#程序 2.1.1 C#...

    ASP.NET 3.5 开发大全word课件

    1.3.7 错误列表窗口 1.4 安装SQL Server 2005 1.5 ASP.NET应用程序基础 1.5.1 创建ASP.NET应用程序 1.5.2 运行ASP.NET应用程序 1.5.3 编译ASP.NET应用程序 1.6 小结 第2章 C# 3.0程序设计基础 2.1 C#程序 2.1.1 C#...

    ASPNET35开发大全第一章

    1.3.7 错误列表窗口 1.4 安装SQL Server 2005 1.5 ASP.NET应用程序基础 1.5.1 创建ASP.NET应用程序 1.5.2 运行ASP.NET应用程序 1.5.3 编译ASP.NET应用程序 1.6 小结 第2章 C# 3.0程序设计基础 2.1 C#程序 2.1.1 C#...

Global site tag (gtag.js) - Google Analytics