<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    好好生活,努力工作,天天向上!

    BlogJava 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
      46 Posts :: 1 Stories :: 178 Comments :: 0 Trackbacks

       目前正在使用Wicket + xhtml + JQuery + Spring + Hibernate在做一個(gè)電子商務(wù)網(wǎng)站,類似于京東的那樣,通過(guò)這些時(shí)間的使用,總結(jié)了一下Wicket 學(xué)習(xí)筆記。

       Wicket 的頁(yè)面包含兩個(gè)基本的文件,分別.html 和.java 文件,.html文件負(fù)責(zé)界面的描述,.java文件負(fù)責(zé)實(shí)現(xiàn)邏輯了,比如提供數(shù)據(jù)。在默認(rèn)的情況下,.html和.java放在同一個(gè)包里面,wicket引擎的默認(rèn)搜索路徑是在java文件的所在的包下面搜索,我很不喜歡這種方式,因?yàn)槿绻募欢啵煸谝黄鸷懿缓枚ㄎ?而且如果你是使用Eclipse WTP來(lái)開(kāi)發(fā)Web項(xiàng)目,你可能會(huì)將html文件放在 WebContent 的pages文件夾下,將資源(比如圖片,CSS,JS) 放在Web工程下面的 WebContent  文件夾下的resource文件夾下(注意,我使用的是Wicket 1.4,不能引用resources文件夾的文件,很奇怪,難道resources是關(guān)鍵字?),這樣的話,在pages文件夾下面的html文件可以直接將resource 文件夾作為參考目錄進(jìn)行引用,比如pages下面的IndexPage.html可以通過(guò)

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

       這樣使用 resource/styles/common/ 文件夾下面的 common.css 文件,圖片也可以通過(guò)這樣引用。如果你將html和java文件放在同級(jí)目錄,就沒(méi)有這么方便了,可能需要在路徑前面添加N個(gè) ../ 這樣的符號(hào)來(lái)定位上級(jí)目錄


       那到底怎么樣才能分類html和java文件呢?


       你可以自己創(chuàng)建 ResourceStreamLocator 的子類來(lái)自定義搜索路徑。然后在你的WebApplication中這樣添加

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

      
      在我的項(xiàng)目中我簡(jiǎn)化了包結(jié)構(gòu),下面是我的包結(jié)構(gòu):

       我將頁(yè)面java代碼(繼承自 org.apache.wicket.markup.ht ml.*  的類)放在page源文件夾下面,非頁(yè)面java代碼放在src源文件夾下面,conf源文件夾放Hibernate和Spring的配置文件。page源文件下面的包結(jié)構(gòu)和WebContent下面的pages文件夾保持一致。

     
      我的
    ResourceStreamLocator 子類是這樣寫(xiě)的:

     /**
     * 資源定位器。
     * 
     * 
    @author 劉堯興 2009-10-16
     
    */
    public class EasyBuyResourceStreamLocator extends ResourceStreamLocator {

        
    /**      */
        
    private ServletContext servletContext;

        
    /**
         * 構(gòu)造函數(shù)。
         * 
    @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頁(yè)面資源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頁(yè)面都繼承自我自定義的ParentPage類,在資源定位器搜索的時(shí)候時(shí)判斷一下類型,這樣就不會(huì)將其他的WebPage的資源給攔截了,比如Wicket自帶的頁(yè)面錯(cuò)誤頁(yè)面。


    posted on 2009-10-28 18:06 VWPOLO 閱讀(2416) 評(píng)論(12)  編輯  收藏 所屬分類: Java 技術(shù)Web 開(kāi)發(fā)

    Feedback

    # re: Wicket使用筆記之更改資源定位器 2009-11-18 10:00 erics
    最近在學(xué)Wicket,剛從JSF和SSH那邊轉(zhuǎn)過(guò)來(lái),但是一直沒(méi)有配置正確。不知能不能請(qǐng)你把你做得這個(gè)Demo發(fā)我研究下呢(最好是完整的項(xiàng)目,包括包和配置文件等),萬(wàn)分感謝!  回復(fù)  更多評(píng)論
      

    # re: Wicket使用筆記之更改資源定位器 2010-04-02 16:41 yanweijie
    博主,你能不能講講wicket的resource,我如果有大量的圖片,該如何引用,我的圖片都放在web頁(yè)這個(gè)目錄里  回復(fù)  更多評(píng)論
      

    # re: Wicket使用筆記之更改資源定位器 2010-04-02 22:14 VWPOLO
    @yanweijie
    這個(gè)可以直接引用啊,比如我的Web工程結(jié)構(gòu)式
    WebContent/resource/products/book/aaa.jpg
    WebContent/resource/products/book/bb.jpg

    使用的話是這樣,在HTML中
    <A href="http://static.easybuy.com/book/topic/2036_14350.shtml" target=_blank><IMG src="resource/products/book/aaa.jpg" border=0></A>   回復(fù)  更多評(píng)論
      

    # re: Wicket使用筆記之更改資源定位器 2010-04-03 09:20 yanweijie
    謝謝博主的熱心回復(fù)。還想問(wèn)你個(gè)問(wèn)題,wicket怎么做那個(gè)在線支付,接口要求用form的action屬性直接指向一個(gè)網(wǎng)關(guān),我如果在wicket的form組件里用了onSubmit(),action屬性就不起作用了,可是我兩種都想要,既要用html的action提交數(shù)據(jù),同時(shí)在onSubmit()里處理我自己的業(yè)務(wù)。   回復(fù)  更多評(píng)論
      

    # re: Wicket使用筆記之更改資源定位器 2010-04-03 09:26 yanweijie
    @VWPOLO
    resource原理是什么,是根據(jù)你前面寫(xiě)的locator還是wicket的PakageResource?可是pakageResource的構(gòu)造方法都是帶Class的?web頁(yè)目錄下哪有類,所以必須要有你的locator才能生效?  回復(fù)  更多評(píng)論
      

    # re: Wicket使用筆記之更改資源定位器[未登錄](méi) 2010-04-03 13:46 VWPOLo
    @yanweijie
    我在OnSubmit中是使用腳本實(shí)現(xiàn)這樣的功能的  回復(fù)  更多評(píng)論
      

    # re: Wicket使用筆記之更改資源定位器[未登錄](méi) 2010-04-03 13:48 VWPOLo
    @yanweijie
    這里的resource和wicket沒(méi)有什么關(guān)系,我這里的資源管理器主要用于加載html文件,因?yàn)閣icket的java類默認(rèn)從當(dāng)前文件夾加載對(duì)應(yīng)的html文件。注意這里的resource文件夾不能重命名為resources,會(huì)出現(xiàn)問(wèn)題  回復(fù)  更多評(píng)論
      

    # re: Wicket使用筆記之更改資源定位器 2010-04-03 15:59 yanweijie
    @VWPOLo
    那真是無(wú)奈了,我現(xiàn)在也不懂JavaScript,為啥就沒(méi)有更簡(jiǎn)單的方式呢,可不可以像ExternalLink一樣直接請(qǐng)求url,只不過(guò)后面跟了參數(shù)而已  回復(fù)  更多評(píng)論
      

    # re: Wicket使用筆記之更改資源定位器 2010-04-04 11:03 yanweijie
    博主,我在郵件列表中搜到一個(gè)方法,WebRequestCycle.get().setRequestTarget(new RedirectRequestTarget("URL...")); 試了下貌似可以。  回復(fù)  更多評(píng)論
      

    # re: Wicket使用筆記之更改資源定位器[未登錄](méi) 2010-04-04 14:46 VWPOLO
    @yanweijie
    恭喜你,我也學(xué)到一招  回復(fù)  更多評(píng)論
      

    # re: Wicket使用筆記之更改資源定位器 2010-04-05 11:14 yanweijie
    這種方式還是不行,我只能構(gòu)造get方式的url,post不知道該怎么做  回復(fù)  更多評(píng)論
      

    # re: Wicket使用筆記之更改資源定位器 2010-04-06 15:37 yanweijie
    博主能不能把你的實(shí)現(xiàn)方式發(fā)過(guò)來(lái)給小弟參考下,不勝感激。361273693@qq.com  回復(fù)  更多評(píng)論
      

    主站蜘蛛池模板: 久久电影网午夜鲁丝片免费| 成年网站免费入口在线观看| 亚洲黄色免费观看| 久久国产亚洲观看| 亚洲AV无码乱码国产麻豆穿越 | 女人裸身j部免费视频无遮挡| 久久精品国产亚洲av瑜伽| 亚洲av日韩综合一区二区三区| 亚洲欧美日韩自偷自拍| 亚洲精品又粗又大又爽A片| 亚洲熟妇无码AV| 色婷婷亚洲一区二区三区| 免费国产草莓视频在线观看黄| 曰批全过程免费视频免费看 | 精品亚洲A∨无码一区二区三区| 日韩精品亚洲人成在线观看| 亚洲色欲www综合网| 久久精品国产亚洲AV忘忧草18| 亚洲中文字幕一二三四区苍井空| 亚洲性色精品一区二区在线| 久久亚洲AV成人无码国产电影 | 亚洲三级视频在线| 亚洲欧美日韩久久精品| 国产天堂亚洲国产碰碰| a一级爱做片免费| 久久精品一区二区免费看| 114一级毛片免费| 女人被男人桶得好爽免费视频| 国产又大又黑又粗免费视频| 亚洲一区无码精品色| 亚洲成A人片在线观看WWW| 亚洲欧洲日产国码二区首页| 亚洲永久网址在线观看| 边摸边吃奶边做爽免费视频99| 国产精品美女久久久免费 | 久久亚洲欧美国产精品| 久久av免费天堂小草播放| 96免费精品视频在线观看| 免费看的成人yellow视频| 亚洲人成无码网WWW| 亚洲春色在线观看|