`

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

    博客分类:
  • JAVA
阅读更多

 目前正在使用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可以通过 <!--endfragment--><!--endfragment-->

   这样使用 resource/styles/common/ 文件夹下面的 common.css 文件,图片也可以通过这样引用。如果你将html和java文件放在同级目录,就没有这么方便了,可能需要在路径前面添加N个 ../ 这样的符号来定位上级目录


   那到底怎么样才能分类html和java文件呢?
<!--endfragment-->

 


 

 

 

 

 

 

 

 

 

 

   你可以自己创建 ResourceStreamLocator

的子类来自定义搜索路径。然后在你的WebApplication中这样添加

getResourceSettings().setResourceStreamLocator(new EasyBuyResourceStreamLocator(getServletContext()));

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

<!--endfragment-->

<!--endfragment-->

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

 
  我的
ResourceStreamLocator 子类是这样写的:

<!--endfragment-->

 /**
 * 资源定位器。
 * 
 * 
@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自带的页面错误页面。

<link href="resource/styles/common/common.css" rel="stylesheet" type="text/css"> 
分享到:
评论

相关推荐

    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