小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

定制自己的xDoclet標簽

 bluecrystal 2006-06-09

xDoclet是一種通過讀取JAVA源文件中的特定標簽,然后生成指定文件的工具。xDoclet標簽本身已經(jīng)提供了一些常用的標簽,例如@ejb,@hibernate,@web等等,但是仍然不能滿足我們的需求。


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


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


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


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


像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的配置文件了,而且還利于培訓新的開發(fā)人員,再加入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自帶的一些標簽包,發(fā)現(xiàn)只需要提供三個文件即可實現(xiàn)自定義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>/*
                        
* 創(chuàng)建日期 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./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>”代表該標簽出現(xiàn)在方法上而不是類之上。例如
                        
/**
*@javascript.form
*name=”test”
*/
public String getXXX()
{
}</ccid_code>


</ccid_nobr>


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


根目錄
|
|--META-INF/xtags.xml
|
|--源代碼
|----|
|----|--resources/*.xdt,*.dtd 

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約