亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

定制xDoclet標簽自動生成框架配置

2019-11-18 11:47:23
字體:
來源:轉載
供稿:網友

  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為例,假如表單內有一文本框<input type=”text” name=”txtUsername” />,那么對應的Page類或叫FormBean類就應有如下代碼:
  private HtmlInputText txtUsername = new HtmlInputText();
  /**
  * @return 用戶名
  */
  public HtmlInputText getTxtUsername ()
  {
    return txtUsername;
  }
  /**
   * @param text
   */
  public void setTxtTeaName(HtmlInputText text)
  {
    txtTeaName = text;
  }
  假如可以利用xDoclet,那么,就可以自動生成JSValidation的配置文件了,而且還利于培訓新的開發人員,再加入ant task還可以形成每日構建。想象的代碼應該是下面這個樣子:
  /**
   * @javascript.field
   * name="frmZBAddGlobalPage:txtTeaName"
   * display-name="用戶名"
   *
   * @javascript.depend
   * name="required"
   *
   * @return用戶名
   */
   public HtmlInputText getTxtUsername()
   {
     return txtUsername;
   }
  通過分析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";
  
  然后只需將三個文件組合起來既可,具體代碼如下:
  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()}));
    }
  要想ant可以使用,只需要以下簡單的代碼:
  /*
   * 創建日期 2004-4-26
   */
  package paradise.xdoclet.modules.javascript;
  
  import xdoclet.DocletTask;
  
  /**
   * @author 清風
   */
  public class JavascriptDocletTask extends DocletTask
  {
    public JavascriptDocletTask()
    {
      addSubTask(new JavascriptSubTask());
    }
  }
  在ant中按如下方式定義:
  <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>
  
  接下來,也是最核心的部分,就是有關xdt模板語言,xdt文件可以說是自定義xDoclet標簽的最重要的文件之一,以JavaScriptxDoclet為例,簡單介紹一下xdt模板語言:
  <XDtClass:forAllClasses>  遍歷所有含有標簽的類(在ant中指定)
  <XDtMethod:forAllMethods>  遍歷當前類的所有方法
  <XDtMethod:ifHasMethodTag tagName="javascript.form">  假如遍歷到的方法中含有指定的標簽
  <XDtMethod:forAllMethodTags tagName="javascript.depend">  遍歷當前方法的所有標簽
  更多的模板語言,參考xDoclet的.XDT文檔,都是很好理解的模板語言。
  
  接下來,開始自定義自己的標簽,新建一個xtags.xml文件,加上開頭
  <?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">
  然后寫下所有自定義的標簽,例如:
  <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>
  注重幾個地方:
  “<level> method </level>”代表該標簽出現在方法上而不是類之上。例如
  /**
  *@javascript.form
  *name=”test”
  */
  public String getXXX()
  {
  }
  a
  最后就是將這些文件打成jar,其放置目錄分別是:
  根目錄
  
  --META-INF/xtags.xml
  
  --源代碼
  ----
  ------resources/*.xdt,*.dtd

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲情综合五月天| 国产自产女人91一区在线观看| 亚洲欧美国产精品久久久久久久| 亚洲视频在线播放| 日韩在线视频网| 国产精品视频内| 91精品国产99| 久久久日本电影| 国产主播喷水一区二区| 亚洲综合中文字幕在线| 国产精品成熟老女人| 中文精品99久久国产香蕉| 亚洲欧美综合另类中字| 日韩国产欧美精品一区二区三区| 久久亚洲一区二区三区四区五区高| 亚洲最大在线视频| 欧美肥臀大乳一区二区免费视频| 日韩精品免费在线视频| 国产日韩欧美夫妻视频在线观看| 九九久久精品一区| 91精品国产自产91精品| 色偷偷亚洲男人天堂| 日韩国产欧美精品一区二区三区| 欧美性xxxx在线播放| 日韩在线小视频| 欧美一区二区三区免费视| 久久国产精品免费视频| 国产精品高精视频免费| www.亚洲男人天堂| 亚洲国产私拍精品国模在线观看| 国产精品海角社区在线观看| 日韩av免费在线看| 久久久999国产精品| 欧美高清视频在线观看| 亚洲天堂av在线播放| 亚洲欧美国产精品久久久久久久| 欧美精品久久久久a| 亚洲第一级黄色片| 国产精品综合久久久| 亚洲男人天堂九九视频| 国产精品一区专区欧美日韩| 午夜美女久久久久爽久久| 少妇久久久久久| 国产自产女人91一区在线观看| 亚洲天堂免费在线| 蜜月aⅴ免费一区二区三区| 久久这里只有精品视频首页| 日韩av在线直播| 大胆人体色综合| 久久乐国产精品| 欧美精品在线免费| 日韩免费电影在线观看| 亚洲精品999| 国产精品丝袜视频| 久久久久久久久久久久久久久久久久av| 亚洲精品456在线播放狼人| 2018中文字幕一区二区三区| 国产z一区二区三区| 色青青草原桃花久久综合| 亚洲色图18p| 日本欧美国产在线| 久久久久久91香蕉国产| 久久香蕉频线观| 国产精品免费视频xxxx| 久久精品人人做人人爽| 欧美一区二区色| 91精品国产91久久久久| 日韩成人在线观看| 国产精品久久久久不卡| 国产不卡视频在线| 亚洲亚裔videos黑人hd| 国产日韩中文在线| 国产精品久久久久久久久男| 97人人模人人爽人人喊中文字| 国产免费久久av| 久久成人免费视频| 国产视频精品免费播放| 国产男人精品视频| 国产日韩精品在线| 国产成人自拍视频在线观看| 亚洲美女av电影| 精品美女永久免费视频| 国内精品久久久久影院优| 国产美女久久久| 91九色单男在线观看| 91tv亚洲精品香蕉国产一区7ujn| 欧美极度另类性三渗透| 国产精品自产拍在线观看| 国产成人精品av在线| 91精品国产综合久久香蕉最新版| 欧美亚州一区二区三区| 国产亚洲精品久久久优势| 国模精品视频一区二区| 国产精品美女免费视频| 久久免费精品日本久久中文字幕| 久久久久久久久电影| 国产精品无av码在线观看| 81精品国产乱码久久久久久| 国产欧美日韩免费| 国产成人精品av| 欧美激情乱人伦一区| 国产在线日韩在线| 91精品国产91久久久| 91久久中文字幕| 欧美电影在线播放| 国产精自产拍久久久久久蜜| 欧美与欧洲交xxxx免费观看| 日韩av一区二区在线观看| 国产偷国产偷亚洲清高网站| 欧美亚州一区二区三区| 日韩欧美在线观看视频| 国产成人精品在线| 欧美一级淫片播放口| 国产一区二区三区在线观看视频| 亚洲精品456在线播放狼人| 日韩激情视频在线| 国产精品视频不卡| 日本国产欧美一区二区三区| 国产精品福利无圣光在线一区| 亚洲欧洲在线看| 国语自产精品视频在线看| 日韩av在线天堂网| 国产精品热视频| 国产成人精品综合| 深夜福利国产精品| 91精品国产91久久久久久久久| 亚洲欧美成人一区二区在线电影| 精品无人区乱码1区2区3区在线| 欧美洲成人男女午夜视频| 欧美一级成年大片在线观看| 成人精品视频在线| 亚洲日韩中文字幕在线播放| 91社区国产高清| 日韩有码在线视频| 欧美日韩国产成人在线| 久久韩剧网电视剧| 亚洲色图狂野欧美| 色综合久久久888| 亚洲色图综合网| 亚洲综合国产精品| 亚洲国产黄色片| 久久久av网站| 丝袜一区二区三区| 久久91精品国产91久久跳| 亚洲一区二区自拍| 亚洲欧美一区二区三区在线| 亚洲黄页网在线观看| 日韩的一区二区| 亚洲精品国产拍免费91在线| 日韩在线视频网站| 97**国产露脸精品国产| 久久偷看各类女兵18女厕嘘嘘| 国内精品在线一区| 国产一区玩具在线观看| 国产精品网站大全| 精品久久久久久| 91在线免费网站| 成年人精品视频| 欧美激情中文网| 亚洲精品成人免费| 欧美巨乳美女视频| 亚洲国产精品热久久| 日本中文字幕成人| 亚洲黄色在线看|