Struts2.0提供一些UI标记,封装了错误显示,提示等逻辑(用起来还不错),这些UI标记是基于模板技术实现的,缺省是基于Freemark模板 技术,如果有能力可以实现自己的模板引擎,很少有这种需求。
该模板引擎会将标记与对应的模板文件联系起来,然后解析为HTML片断返回。这些模板文件会封装相应的逻辑。
框架缺省提供基于xhtml,xhmtl-css,ajax等几套模板,一套模板就称为一个主题(theme)。
全局模板路径由struts.properties文件的action.ui.templateDir 属性决定,也可以针对某个具体的标记改变模板加载位置。
模板文件可以保存在类路径,也可以保存在应用上下文路径,模板引擎会首先查找应用上下文路径。缺省的模板文件路径为template/{theme} /*.ftl,其中{theme}表示主题名称,比如xhtml。
每个UI标记都有theme属性,可以用来选择采用的theme,缺省使用的主题由struts.properties文件的application.ui.theme 属性决定。
有时候框架生成的UI可能不能满足要求,这时候可以进行扩展。如果要基于框架提供的主题进行扩展,通常的作法是将类路径下的主题文件拷贝到应用程序上下 文,再改写相应的部分。因为引擎会首先查找应用程序上下文。
xthml主题提供几个很好的例子,simple主题提供基本的控件,而许多xhtml标记只是在此基础上添加一个头部或尾部,示例如下:
包含一个主题的所有模板文件的目录下可以包含一个theme.properties文件,可以添加一个parent入口指定需要扩展的主题,然后只要提供 需要改写的模板文件即可,比如ajax主题就使用这种技术扩展xhtml主题,示例如下: