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

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

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

    隨筆-314  評論-209  文章-0  trackbacks-0
    xDoclet是一種通過讀取JAVA源文件中的特定標簽,然后生成指定文件的工具。xDoclet標簽本身已經提供了一些常用的標簽,例如@ejb,@hibernate,@web等等,但是仍然不能滿足我們的需求。


    例如我們最新的項目中引用了一個javascript驗證框架,通過配置特定的xml配置文件,即可完成客戶端表單驗證,但是不想開發人員再去學習一套框架,于是想讓開發人員在源代碼中寫@javascript這樣的標簽,然后生成其配置文件。


    javascript客戶端驗證一直是web開發中一個比較頭疼的問題,經常是每一個頁面中充斥著許多類似甚至相同的驗證代碼,如何統一有效的管理這些代碼,以及如何做到代碼頁面的分離一直沒有太好的解決方法。


    運用這個驗證框架那么客戶端開發就變成了配置validation-config.xml這個文件如此輕松了,本文并不打算詳細講述如何使用JSValidation框架,有興趣的朋友可以去http://www.cosoft.org.cn/projects/jsvalidation JSValidation的官方網站自己去學習。


    雖然運用這框架已經可以很好的完成客戶端驗證代碼的編寫,并且提供了dtd文件進行xml文件的,但是手動編寫xml文件還是很容易出錯,效率比較低,而且新的開發人員還要掌握一個全新的框架,不宜于開發人員入門。


    像Struts或JSF這樣的框架大都需要為表單寫一個類似FormBean的東西,以JSF為例,假如表單內有一文本框,那么對應的Page類或叫FormBean類就應有如下代碼:


    <ccid_nobr>

    bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center">




    <ccid_code>private HtmlInputText txtUsername = new HtmlInputText();
    
    /**
    * @return 用戶名
    */
    public HtmlInputText getTxtUsername ()
    {
    return txtUsername;
    }
    /**
    * @param text
    */
    public void setTxtTeaName(HtmlInputText text)
    {
    txtTeaName = text;
    }</ccid_code>


    </ccid_nobr>


    如果可以利用xDoclet,那么,就可以自動生成JSValidation的配置文件了,而且還利于培訓新的開發人員,再加入ant task還可以形成每日構建。想象的代碼應該是下面這個樣子:


    <ccid_nobr>

    bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center">




    <ccid_code>/**
    
    * @javascript.field
    * name="frmZBAddGlobalPage:txtTeaName"
    * display-name="用戶名"
    *
    * @javascript.depend
    * name="required"
    *
    * @return用戶名
    */
    public HtmlInputText getTxtUsername()
    {
    return txtUsername;
    }</ccid_code>


    </ccid_nobr>


    通過分析xDoclet自帶的一些標簽包,發現只需要提供三個文件即可實現自定義xDoclet標簽:一個繼承于XmlSubTask的類,一個繼承于DocletTask的類(用于ant),一個xdt的模板語言文件即可。


    在XmlSubTask類中,首先,定義模板文件名:
    private static String DEFAULT_TEMPLATE_FILE ="resources/validation-config.xdt";


    定義dtd文件名:
    private final static String DTD_FILE_NAME_20 ="resources/validation-config.dtd";


    定義要生成的配置文件名:
    private static String GENERATED_FILE_NAME = "validation-config.xml";


    然后只需將三個文件組合起來既可,詳細代碼如下:


    <ccid_nobr>

    bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center">




    <ccid_code>public javascriptSubTask()
    
    {
    setTemplateURL(getClass().getResource(DEFAULT_TEMPLATE_FILE));
    setDestinationFile(GENERATED_FILE_NAME);
    }

    public void execute() throws XDocletException
    {
    setDtdURL(getClass().getResource(DTD_FILE_NAME_20));
    startProcess();
    }

    protected void engineStarted() throws XDocletException
    {
    System.out.println(
    Translator.getString(
    XDocletMessages.class,
    XDocletMessages.GENERATING_SOMETHING,
    new String[] { getDestinationFile()}));
    }</ccid_code>


    </ccid_nobr>


    要想ant可以使用,只需要以下簡單的代碼:


    <ccid_nobr>

    bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center">




    <ccid_code>/*
    
    * 創建日期 2004-4-26
    */
    package paradise.xdoclet.modules.javascript;

    import xdoclet.DocletTask;

    /**
    * @author 清風
    */
    public class javascriptDocletTask extends DocletTask
    {
    public javascriptDocletTask()
    {
    addSubTask(new javascriptSubTask());
    }
    }</ccid_code>


    </ccid_nobr>


    在ant中按如下方式定義:


    <ccid_nobr>

    bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center">




    <ccid_code><target name="javascript" depends="jxdoc_init" 
    
    description="Generate javascript validation-config">
    <javascriptdoclet destdir="${jsp}/javascript">
    <fileset dir="${src}">
    <include name="**/zaibian/*.java"/>
    </fileset>
    </javascriptdoclet>
    </target></ccid_code>


    </ccid_nobr>


    接下來,也是最核心的部分,就是有關xdt模板語言,xdt文件可以說是自定義xDoclet標簽的最重要的文件之一,以javascriptxDoclet為例,簡單介紹一下xdt模板語言:


    <ccid_nobr>

    bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center">




    <ccid_code><XDtClass:forAllClasses>    遍歷所有含有標簽的類(在ant中指定)
    
    <XDtMethod:forAllMethods> 遍歷當前類的所有方法
    <XDtMethod:ifHasMethodTag tagName="javascript.form"> 如果遍歷到的方法中含有指定的標簽
    <XDtMethod:forAllMethodTags tagName="javascript.depend"> 遍歷當前方法的所有標簽</ccid_code>


    </ccid_nobr>


    更多的模板語言,參考xDoclet的.XDT文檔,都是很好理解的模板語言。


    接下來,開始自定義自己的標簽,新建一個xtags.xml文件,加上開頭


    <ccid_nobr>

    bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center">




    <ccid_code><?xml version="1.0" encoding="UTF-8"?>
    

    <!DOCTYPE xdoclet PUBLIC "-//XDoclet Team//DTD XDoclet Tags 1.1//EN"
    "http://xdoclet.sourceforge.net/dtds/xtags_1_1.dtd"></ccid_code>


    </ccid_nobr>


    然后寫下所有自定義的標簽,例如:


    <ccid_nobr>

    bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center">




    <ccid_code><xdoclet>
    
    <namespace>
    <name>javascript</name>
    <tags>
    <tag>
    <level>method</level>
    <name>javascript.form</name>
    <usage-description>Form</usage-description>
    <condition type="method"/>
    <parameter type="text">
    <name>id</name>
    <usage-description>Form id</usage-description>
    <mandatory>true</mandatory>
    </parameter>
    <parameter type="text">
    <name>show-error</name>
    <usage-description>Form Error Display</usage-description>
    <mandatory>true</mandatory>
    </parameter>
    <parameter type="text">
    <name>onfail</name>
    <usage-description>Form Error Run Custom javascript Function</usage-description>
    <mandatory>false</mandatory>
    </parameter>
    </tag>
    </tags>
    </namespace>
    </xdoclet></ccid_code>


    </ccid_nobr>


    注意幾個地方:


    <ccid_nobr>

    bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center">




    <ccid_code>“<level> method </level>”代表該標簽出現在方法上而不是類之上。例如
    
    /**
    *@javascript.form
    *name=”test”
    */
    public String getXXX()
    {
    }</ccid_code>


    </ccid_nobr>


    最后就是將這些文件打成jar,其放置目錄分別是:


    根目錄
    |
    |--META-INF/xtags.xml
    |
    |--源代碼
    |----|
    |----|--resources/*.xdt,*.dtd
    posted on 2006-11-05 08:33 xzc 閱讀(265) 評論(0)  編輯  收藏 所屬分類: Xdoclet
    主站蜘蛛池模板: 69av免费视频| 亚洲AV蜜桃永久无码精品| 亚洲午夜精品一区二区麻豆| 国产精品国产午夜免费福利看 | 一级毛片免费毛片毛片| 亚洲AV日韩AV永久无码下载| 性xxxxx免费视频播放| 高潮毛片无遮挡高清免费| 亚洲国产天堂久久综合网站 | 免费人成网站在线播放| 青青操视频在线免费观看| 亚洲美女视频一区| 日韩a级毛片免费视频| 国产一区二区免费| 国产亚洲精品AAAA片APP| 亚洲av色福利天堂| 日韩精品成人亚洲专区| 最近中文字幕无免费| 一级视频在线免费观看| 亚洲一区二区三区高清不卡| 国产亚洲AV无码AV男人的天堂 | 亚洲剧情在线观看| 亚洲综合色区在线观看| 成人黄动漫画免费网站视频 | 区三区激情福利综合中文字幕在线一区亚洲视频1 | 波多野结衣免费在线观看| 一级毛片a免费播放王色电影 | 亚洲国产一区在线| 亚洲乱码中文字幕手机在线 | 337p日本欧洲亚洲大胆色噜噜| 亚洲精品国产精品国自产观看| 成人免费视频77777| 99精品全国免费观看视频..| 亚洲aⅴ无码专区在线观看 | 色噜噜亚洲男人的天堂| 亚洲女同成av人片在线观看| 国产成人免费福利网站| 无码永久免费AV网站| 99爱免费观看视频在线| 国产永久免费高清在线| 国产成人精品免费大全|