定制自己的xDoclet标签

原创 2004年09月29日 10:06:00

出处:http://www.javaresearch.org/article/showarticle.jsp?column=2&thread=15082

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()
{
}


最后就是将这些文件打成jar,其放置目录分别是:
根目录
|
|--META-INF/xtags.xml
|
|--源代码
|----|
|----|--resources/*.xdt,*.dtd

定制xdoclet 标签

定制自己的xDoclet标签xDoclet是一种通过读取JAVA源文件中的特定标签,然后生成指定文件的工具。xDoclet标签本身已经提供了一些常用的标签,例如@ejb,@hibernate,@web...
  • alexjjf
  • alexjjf
  • 2005年08月07日 22:42
  • 624

[转]Xdoclet是什么

      在EJB的学习过程中遇到了Xdoclet,一直不明白是什么,搜了很多东西,现在把他们综合一下。 ---------------------------------------------...
  • ideaseek
  • ideaseek
  • 2010年10月02日 21:05
  • 514

开发自己的xDoclet标签

xDoclet是一种通过读取JAVA源文件中的特定标签,然后生成指定文件的工具。xDoclet标签本身已经提供了一些常用的标签,例如@ejb,@hibernate,@web等等,但是仍然不能满足我们的...
  • changzheng
  • changzheng
  • 2004年09月09日 17:31
  • 887

XDoclet的使用攻略

XDoclet的使用攻略
  • jianxin1009
  • jianxin1009
  • 2013年08月06日 10:09
  • 3222

定制xDoclet标签自动生成框架配置

xDoclet是一种通过读取JAVA源文件中的特定标签,然后生成指定文件的工具。xDoclet标签本身已经提供了一些常用的标签,例如@ejb,@hibernate,@web等等,但是仍然不能满足我们的...
  • fidelhl
  • fidelhl
  • 2007年04月02日 15:26
  • 575

Eclipse使用xdoclet1.2.3 生成hibernate配置文件和映射文件

用ant和xdoclet生成hibernate配置文件可以为我们省去很多配置的操作,废话不多说,直接给栗子: eclipse:Eclipse Java EE IDE for Web Developer...
  • Unseenblade
  • Unseenblade
  • 2016年10月30日 13:20
  • 1297

使用MyEclipse和XDoclet开发EJB

   EJB 组件是为企业级应用设计的 java 组件模型,是基于标准分布式对象技术,提供了应用的商务逻辑部分。实现了 EJB 规范的应用服务器提供了可以解决安全性、资源共享、持续运行、并行处理、事务...
  • sophia427
  • sophia427
  • 2007年10月20日 21:42
  • 4927

定制自己的VIM

昨天折腾了一天,看了好多资料,终于把自己的VIM改成一个很好看的配色还有把PYTHON的开发环境也配置的差不多了。从完全不会VIM配置,都后面熟悉了很多参数。慢慢得一个一个做实验,去修改自己的.vim...
  • u010008539
  • u010008539
  • 2015年05月03日 13:11
  • 550

Xdoclet是什么?

作者:zming转载注明出处:http://blog.csdn.net/zmxj/archive/2005/06/17/396913.aspx本文的目的是让你用最短的时间了解xdoclet技术,本人并...
  • zmxj
  • zmxj
  • 2005年06月17日 18:34
  • 3705

如何使用XDoclet来简化EJB的开发

    根据EJB的规范,有些代码可以从Bean代码推导出来,如Home,Remote接口代码,而类似于ejb-jar.xml这样的Deployment Descriptor配置文件,如果让人手工输入...
  • omage
  • omage
  • 2010年01月17日 18:23
  • 1151
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:定制自己的xDoclet标签
举报原因:
原因补充:

(最多只允许输入30个字)