精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-03-17
最后修改:2009-03-18
模板 强烈推荐使用模板。模板提供很多好处:
怎样使用模板参看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()); } }
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-03-17
你我的思想有别啊
|
|
返回顶楼 | |
发表时间:2009-03-18
elvishehai 写道 你我的思想有别啊 ? 此话怎讲? |
|
返回顶楼 | |
浏览 1778 次