首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

替nutz添加tiles视图

2012-12-26 
为nutz添加tiles视图公司的项目使用struts1,这时我接触到了tiles,这个页面增强布局框架,使用了将近半年,感

为nutz添加tiles视图

公司的项目使用struts1,这时我接触到了tiles,这个页面增强布局框架,使用了将近半年,感觉良好。最近有一个个人项目我采用nutz,感到只用jsp太麻烦,于是想将tiles整合进来。tiles一般是和struts这样的框架整合的例子多,单独用的几乎没有。于是狠下心去看tiles的主页,终于有了收获,用了一下午加一晚上终于跑通了例子,并将nutzView写好了

首先我使用了tiles2.2,去官网下载 bin包。
解压后,选取 tiles-jsp,tiles-core,tiles-servlet,tiles-api,
slf4j-api,slf4j-log4j12,conmmons-beanutils,commons-digester,commons-logging,jcl-over-slf4j,log4j这些jar,copy到 lib下。
然后

?
public class TestTileFactory extends BasicTilesContainerFactory {    @Override    protected List<URL> getSourceURLs(TilesApplicationContext applicationContext,            TilesRequestContextFactory contextFactory) {        List<URL> urls = new ArrayList<URL>();        try {            urls.add(applicationContext.getResource("/WEB-INF/tiles-defs.xml"));        } catch (IOException e) {            throw new DefinitionsFactoryException(                    "Cannot load definition URLs", e);        }        return urls;    }}  

??再添加 类

??public class TestTilesListener extends AbstractTilesListener {

    @Override    protected TilesInitializer createTilesInitializer() {        return new TestTilesListenerInitializer();    }    private static class TestTilesListenerInitializer extends AbstractTilesInitializer {        @Override        protected AbstractTilesContainerFactory createContainerFactory(                TilesApplicationContext context) {            return new TestTileFactory();        }    }}

?在web.xml中添加配置?

?<listener>

  <listener-class>com.sh169.util.TestTilesListener</listener-class>  </listener>

?然后是,添加nutz的view

?下面是代码

?public class TilesView implements View{

private String viewName;public TilesView(){}public TilesView(String viewName){this.viewName = viewName;}@SuppressWarnings("deprecation")@Overridepublic void render(HttpServletRequest req, HttpServletResponse resp,Object obj) throws Throwable {req.setAttribute("obj", obj);TilesContainer tc = TilesAccess.getContainer(req.getSession().getServletContext());tc.render(viewName, req,resp);}}public TilesViewMaker(){}@Overridepublic View make(Ioc ioc, String type, String value) {if("tiles".equalsIgnoreCase(type))return new TilesView(value);return null;}

?

?使用时添加 @ok("tiles:yourdefname")即可

?

使用感受:引用的jar包太多了,精简到4个比较能接受,还有这是2.1中的例子,在2.2中tilesAccess中的 getContainer方法被提示不可用,应该有其他方法可以替代,以后有时间研究下 tiles的源码,自己整理成一个jar包,这样引用比较方便

我感觉包这样划分比较好,tile-core,tile-jsp,tile-freemarker,依次类推。这样使用起来将会很方便,而且logger也应该写一个logger类,替代common-logging的功能,这样能少引用几个类。

好了要睡觉了,剩下的明天再研究。

热点排行