`
z75148885
  • 浏览: 191386 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

定制xdoclet 标签

阅读更多

定制自己的xDoclet标签

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类就应有如下代码:

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 in action 中文版

    2. **利用和创建XDoclet标签**:标签是XDoclet中用于扩展其功能的关键元素。开发者可以通过定义新的标签来扩展XDoclet的元数据表示能力,使其能处理更复杂的业务逻辑和结构。 3. **创建自定义XDoclet任务**:除了...

    学习XDoclet教程

    在使用XDoclet时,开发人员需要在Java源代码中插入特定的XDoclet标签,比如`@ejb`、`@hibernate`等,这些标签提供了关于类、方法和字段的额外信息。XDoclet通过解析Java源代码,构建出一个内部的结构模型,也就是元...

    Xdoclet的jar包下载了

    与之相关的还有XJavaDoc,这是一个扩展版的JavaDoc,它可以生成更丰富的文档,包括自定义的标签和更详细的元数据。 在XDoclet中,模板引擎扮演着核心角色。它允许开发者定义自己的模板,从而定制生成的配置文件内容...

    Ant结合Xdoclet 实例教程(之整合 Hibernate)

    例如,可以使用`&lt;xdoclet&gt;`标签来调用Xdoclet任务。 4. **生成映射文件**:运行Ant脚本,它会根据源代码中的Javadoc注释自动生成Hibernate映射文件。 5. **配置Hibernate**:在hibernate.cfg.xml文件中,指定生成...

    精通XDoclet.doc

    2. **XDoclet标签**:定义在Java源代码中的注释,用于指导XDoclet如何生成代码。 3. **模板文件**:预定义的模板文件,用于指定生成文件的具体格式和结构。 4. **XDoclet引擎**:负责解析Java源代码中的标记和模板...

    xdoclet的使用

    XDoclet的Ant任务具有动态加载子任务的能力,这使得在构建过程中可以灵活地扩展和定制。同时,XDoclet还包含了一套标签处理器,用于处理和解析Javadoc注释中的元数据。 举个例子,我们可以考虑一个搜索引擎项目。这...

    精通代码生成器XDoclet.doc

    XDoclet 是一个通用的代码生成实用程序,继承了 JavaDoc 引擎的思想,允许根据定制 JavaDoc 标记生成代码和其他文件。它允许您使用象 JavaDoc 标记之类的东西来向诸如类、方法和字段之类的语言特征添加元数据。随后...

    XDoclet In Action.pdf

    XDoclet基于Javadoc,它扩展了Javadoc的功能,使得开发者可以在类、接口或方法的Javadoc注释中添加自定义的标签,这些标签会被XDoclet识别并用于生成相应的代码或配置文件。例如,通过在EJB实体bean上添加特定的...

    Java通用代码生成实用程序XDoclet(源码包)

    像@hibernate.clas、@hibernate.property、@struts.action-forward等等这些特定的注释标签需要去查XDoclet的相关文档了,Xdoclet对目前流行的多种框架、技术都提供了相关的支持。 这样,我们就能在使用ant编译工程...

    xdoclet应用

    xdoclet是一款基于JavaDoc注解的代码生成工具,它通过解析Java源代码中的特定注释(即JavaDoc标签),自动生成各种元数据文件,如EJB组件接口、Hibernate映射文件、JMX管理接口等。这种自动化的方式避免了手动编写...

    XDoclet for WebSphere 5.1-开源

    在XDoclet for WebSphere 5.1中,开发者可以利用专门为WebSphere应用服务器5.1版本定制的标签和元数据,来生成符合该平台需求的部署描述符(如ejb-jar.xml、ibm-ejb-jar-bnd.xml等)和WebSphere特有的持久化配置。...

    Appfuse教程Appfuse开发.pdf

    - 在 AppFuse 中创建一个 POJO 类,比如 `Person` 类,并为其添加 XDoclet 标签,以便自动生成对应的 Hibernate 映射文件。 - 示例代码如下: ```java package org.appfuse.model; /** @hibernate.class ...

    BES 8.0 Development Guide

    - BES 提供了一些私有的 XDoclet 标签,用于定制 EJB 的配置。 - 例如 `&lt;bes.ejb-local-home&gt;` 用于指定本地 Home 接口的实现类。 **1.3.8 XDoclet 运行方式** - 通过命令行运行:`xdoclet -destdir . -srcdir src...

    如何在MyEclipse下开发EJB

    本文将深入解析如何在MyEclipse环境下进行EJB开发,通过详细解读给定文件的【标题】、【描述】、【标签】以及【部分内容】,提炼出一系列关键知识点,帮助读者理解并掌握在MyEclipse下开发EJB的方法。 ### 如何在...

    经典ant笔记.doc

    综上所述,Ant不仅是一款功能强大的构建工具,而且还具有高度的可定制性,适用于各种规模的项目。通过上述知识点的学习,开发者可以更好地利用Ant来提高工作效率,实现项目的自动化构建与部署。

    精通Hibernate

    这段代码展示了如何使用Xdoclet标签定义和生成特定的HTML元素。 综上所述,AppFuse不仅是一个优秀的开源项目,还提供了一系列实用的工具和服务,帮助开发者快速构建高质量的企业级应用。无论是对于初学者还是经验...

    js 实现上下滚动

    "js XDOCLET"可能是指XDoclet,一个基于JavaDoc注解的代码生成工具,尽管在这个场景中它可能与JavaScript无关。"分析与设计 基于Web服务 电子商务系统"暗示了这个话题可能在更广泛的Web开发和电子商务系统设计的上...

    timer部署与基本操作

    ### Timer部署与基本操作 #### 一、简介 在现代软件开发中,定时任务是非常常见的一种需求。通过定时任务,可以实现数据同步、定期...在实际应用中,根据具体的业务需求和技术栈,可能还需要进一步定制和优化配置。

    利用jboss 在 Eclipse IDE 开发

    此外,还可以通过新增组件向导(Wizard)来快速创建组件,该向导提供了预设模板,以简化XDoclet标签的编写过程。 #### 程序代码编辑辅助功能 JBoss Eclipse IDE加强了原本Eclipse JDT的代码编辑功能,提供了更多的...

    JOE-开源

    【标签】"开源软件"进一步确认了JOE的许可和分发方式,这鼓励开发者参与项目的贡献,同时也使得企业能够根据自己的需求定制和集成JOE到他们的开发环境中。 【压缩包子文件的文件名称列表】: - Readme.txt: 这通常...

Global site tag (gtag.js) - Google Analytics