`
vwpolo
  • 浏览: 194742 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Wicket使用笔记之更改资源定位器

阅读更多

  目前正在使用Wicket + xhtml + JQuery + Spring + Hibernate在做一个电子商务网站,类似于京东的那样,通过这些时间的使用,总结了一下Wicket 学习笔记。

   Wicket 的页面包含两个基本的文件,分别.html 和.java 文件,.html文件负责界面的描述,.java文件负责实现逻辑了,比如提供数据。在默认的情况下,.html和.java放在同一个包里面,wicket引擎的默认搜索路径是在java文件的所在的包下面搜索,我很不喜欢这种方式,因为如果文件一多,混在一起很不好定位,而且如果你是使用Eclipse WTP来开发Web项目,你可能会将html文件放在 WebContent 的pages文件夹下,将资源(比如图片,CSS,JS) 放在Web工程下面的 WebContent  文件夹下的resource文件夹下(注意,我使用的是Wicket 1.4,不能引用resources文件夹的文件,很奇怪,难道resources是关键字?),这样的话,在pages文件夹下面的html文件可以直接将resource 文件夹作为参考目录进行引用,比如pages下面的IndexPage.html可以通过  这样使用 resource/styles/common/ 文件夹下面的 common.css 文件,图片也可以通过这样引用。如果你将html和java文件放在同级目录,就没有这么方便了,可能需要在路径前面添加N个 ../ 这样的符号来定位上级目录

<link href= "resource/styles/common/common.css"  rel= "stylesheet"   type= "text/css" >  

 

 

 那到底怎么样才能分类html和java文件呢?

 你可以自己创建 ResourceStreamLocator 的子类来自定义搜索路径。然后在你的WebApplication中这样添加 <!--endfragment-->

 我的 ResourceStreamLocator 子类是这样写的:

/**
 * 资源定位器。
 * 
 * @author 刘尧兴 2009-10-16
 */
public class EasyBuyResourceStreamLocator extends ResourceStreamLocator {

    /**      */
    private ServletContext servletContext;

    /**
     * 构造函数。
     * @param servletContext
     */
    public EasyBuyResourceStreamLocator(ServletContext servletContext) {
        this.servletContext = servletContext;
    }

    @Override
    public IResourceStream locate(Class<?> clazz, String path) {
        if(matchClass(clazz, ParentPage.class)) {
            URL resourceUrl = getPageHtmlResourceUrl(clazz, path);
            if (resourceUrl != null) {
                return new UrlResourceStream(resourceUrl);
            }
        }
        if(matchClass(clazz, ParentPanel.class)) {
            URL resourceUrl = getPanelHtmlResourceUrl(clazz, path);
            if(resourceUrl != null)
                return new UrlResourceStream(resourceUrl); 
        }
        
        // resource not found; fall back on class loading
        return super.locate(clazz, path);
    }
    
    /**
     * 匹配文件类型  。
     * @author 刘尧兴
     * @param source
     * @param target
     * @return boolean
     */
    public boolean matchClass(Class source,Class target) {
        if(source == target)
            return true;
        if(source.getSuperclass() == target) 
            return true;
        if(source.getSuperclass().getSuperclass() == target) 
            return true;
        if(source.getSuperclass().getSuperclass().getSuperclass() == target)
            return true;
        
        return false;
    }

    /**
     * 货物HTML页面资源URL  。
     * @author 刘尧兴
     * @param clazz
     * @param path
     * @return URL
     */
    private URL getPageHtmlResourceUrl(Class<?> clazz, String path) {
        try {
            return servletContext.getResource("/"+path);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
        return null;
    }
    
    /**
     * 获得HTML面板的资源URL  。
     * @author 刘尧兴
     * @param clazz
     * @param path
     * @return URL
     */
    private URL getPanelHtmlResourceUrl(Class<?> clazz, String path) {
        try {
            return servletContext.getResource("/"+path);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
        return null;
    }
}

 我的WebPage页面都继承自我自定义的ParentPage类,在资源定位器搜索的时候时判断一下类型,这样就不会将其他的WebPage的资源给拦截了,比如Wicket自带的页面错误页面。

<!--EndFragment-->
getResourceSettings().setResourceStreamLocator(new EasyBuyResourceStreamLocator(getServletContext()));

 

在我的项目中我简化了包结构,下面是我的包结构:

 

 我将页面java代码(继承自 org.apache.wicket.markup.ht ml.*  的类)放在page源文件夹下面,非页面java代码放在src源文件夹下面,conf源文件夹放Hibernate和Spring的配置文件。page源文件下面的包结构和WebContent下面的pages文件夹保持一致。

分享到:
评论
3 楼 vwpolo 2009-11-19  
jnoee 写道
resources是wicket的关键字,它默认将组件关联的css、js文件解压在这个目录下,并通过这个路径引用。
资源位置改变但仍需建立与包名结构相同的目录层次结构,因此改变资源定位变得意义不大了。
最终我们还是采用它默认的方式,反而好维护一些。


我这里只是想简单一点按照我的喜好来设置目录层次的结构,当然,Wicket对这方面的扩展支持的非常好,可以按照自己的想法来定义,而我当初这样定义的话是想在html中以resources文件作为参考目录进行资源引用的。
2 楼 jnoee 2009-11-19  
resources是wicket的关键字,它默认将组件关联的css、js文件解压在这个目录下,并通过这个路径引用。
资源位置改变但仍需建立与包名结构相同的目录层次结构,因此改变资源定位变得意义不大了。
最终我们还是采用它默认的方式,反而好维护一些。
1 楼 malasun 2009-11-17  
很好,顶一个

相关推荐

    wicket指南

    3. **资源管理**:Wicket 使用`IResourceStreamLocator`和`IResourceStream`接口管理静态资源,如CSS、JavaScript文件。 **五、Wicket 的优点** 1. **学习曲线平缓**:Wicket 的API简洁明了,使得新手能够快速上手...

    wicket_mvn库

    总之,Wicket Maven 库是 Wicket 开发者的重要资源,它提供了构建 Wicket 应用程序所需的所有依赖,简化了项目的构建和维护。通过熟练掌握 Maven 和 Wicket 的基本概念和用法,开发者可以更高效地利用这个库来开发出...

    apacke-wicket-mvn编译

    【标题】:“apacke-wicket-mvn编译”指的是使用Apache Maven构建工具来编译一个基于Apache Wicket的项目。Apache Wicket是一款开源的Java Web应用框架,它以组件为基础,提供了丰富的功能来帮助开发者创建动态、...

    wicket 官方JAVA教程

    开发Wicket应用可以使用Eclipse、IntelliJ IDEA等主流IDE,它们通常都有对应的Wicket插件,提供代码提示、调试等便利功能。 10. **学习资源** 如链接所示,ITEYE博客上有关于Wicket的教程,这是学习Wicket的一个...

    Wicket 8.X开发文档(中文翻译+英文原版)

    使用资源包聚合多个资源 16.8。将JavaScript放在页面正文中 16.9。标题贡献者定位 16.10。自定义资源 16.11。安装资源 16.12。Lambda支持 16.13。共享资源 16.14。自定义资源加载 16.15。CssHeaderItem和...

    wicket 基础知识培训

    过滤器(Filter)是Servlet技术的一个重要补充,它允许在请求到达目标资源之前对其进行拦截和处理。例如,IP访问限制可以通过过滤器实现,当请求到达时,过滤器会检查请求者的IP地址,如果不符合预设规则,则拒绝...

    wicket开发指南 pdf

    Wicket 与其他Web框架的不同之处在于它采用了组件驱动的开发模式。每个HTML元素都可以与Java对象对应,这些对象称为组件,它们负责处理用户的交互事件和呈现页面。这种设计使得Wicket能够轻松地实现页面状态管理,...

    Wicket 入门

    本文将详细介绍如何在 Eclipse 中使用 Maven 创建一个 Wicket 项目,以及运行和调试的基本步骤。 #### 一、Wicket 入门概述 Apache Wicket 是一款开源的 Java Web 开发框架,它的设计目标是使 Java 开发者能够像...

    wicket国际化例子

    在本文中,我们将深入探讨Wicket框架中的国际化(i18n)实现,以及如何使用`wicket:message`和`StringResourceModel`等工具来读取`.properties`资源文件。Wicket是一个流行的Java web应用程序框架,它提供了强大的...

    wicket例子和开发指南

    这个压缩包包含了一个Wicket的开发指南PDF文档以及一些示例项目,这些都是学习和掌握Wicket框架的重要资源。 一、Wicket框架简介 Wicket的核心理念是"组件就是一切",它将Web页面的HTML与Java代码紧密结合,通过...

    wicket相关书籍

    Wicket 相关书籍是深入理解和掌握这个框架的重要资源,下面将针对这些书籍提供的知识进行详尽的概述。 首先,"Apache Wicket Cookbook" 是一本实用指南,旨在帮助开发者快速解决在使用 Wicket 进行Web开发时遇到的...

    wicket7教程

    Wicket的核心功能之一是作为页面布局管理器,允许开发者通过继承已有的标记来实现页面的头部、页脚、左侧菜单、内容等部分。此外,Wicket支持页面继承,可以有效地重用页面布局和逻辑。在页面标记方面,Wicket使用了...

    Wicket开发指南

    - **资源文件**:使用资源文件管理不同语言的文本。 - **本地化设置**:通过配置文件指定不同的语言环境。 以上是对《Wicket开发指南》中关键知识点的详细总结,旨在帮助读者快速掌握Wicket的核心概念和技术要点。

    Wicket.pdf(Wicket开发指南)

    - Wicket 使用基于 Session 的状态管理机制,确保每个用户的会话独立且隔离。 #### 四、Wicket 基本控件 - **信息输出控件:** - **Label:** 用于显示简单的文本信息。 - **MultilineLabel:** 用于显示多行...

    wicket的tree的简单实例

    在本文中,我们将深入探讨Wicket框架中关于Tree组件的简单使用方法,这对于初学者来说是一份极好的学习资源。Wicket是一个强大的Java Web应用程序框架,它提供了丰富的组件库,其中包括用于显示层次结构数据的Tree...

    wicket的helloworld

    Wicket是一个开源的Java Web应用程序框架,它强调组件化和模型-视图-控制器(MVC)的设计模式。这个“Wicket的HelloWorld”程序是初学者入门Wicket的典型例子,它展示了如何利用Wicket框架创建一个简单的Web应用。 ...

    wicket简单实例

    Wicket是一款开源的Java Web应用程序框架,它强调组件化和模型-视图-控制器(MVC)的设计模式。这个“wicket简单实例”是为了帮助初学者理解Wicket的工作原理和基本操作,通过运行这些示例,你可以深入学习Wicket的...

Global site tag (gtag.js) - Google Analytics