定制自己的xDoclet标签

11、XDoclet在Web开发中的应用:从JSP标签到Web框架 本文介绍了XDoclet在Web开发中的应用,包括如何简化定制JSP标签的编写,以及在Struts和WebWork等MVC框架中如何利用XDoclet自动生成配置文件、处理请求和验证表单数据。通过实际代码示例展示了XDoclet在提高Web应用开发效率和维护性方面的优势。 阅读详情

定制自己的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

5、XDoclet入门指南:代码生成与定制的全面解析 本文详细解析了XDoclet的使用方法及其在Java开发中的优势。XDoclet是一个基于模板的代码生成工具,通过提取Java源文件中的元数据,实现EJB接口、部署描述符及其他配置文件的自动化生成。文章介绍了XDoclet的任务配置基础、属性标记的使用方式、代码生成模式(聚合生成与转换生成)、合并点定制机制以及其背后的设计原则。此外,还分析了XDoclet的优势,并通过一个实际的博客系统开发案例展示了其应用效果。XDoclet不仅提高了代码生成效率,还通过信息集中管理与高度可定制性,帮助开发者构建高效、可维 阅读详情

相关推荐

自动泊车算法工程化实现:动力学建模、路径生成与碰撞规避

自动泊车是智能驾驶中典型的低速运动规划问题,其核心在于将车辆动力学约束(如阿克曼转向、加加速度jerk限制)与几何路径规划(Reeds-Shepp、Hybrid A*、最优控制)深度融合。原理上需满足运动学可行性、曲率连续性及包络安全边界;技术价值体现在从数学模型到可部署代码的闭环转化——支持参数替换、ROS对接与实时避障验证;典型应用场景涵盖高校课程设计、无人小车开发及ADAS功能标定;本文即围绕MathorCup C题展开,提供含最小转弯半径精确建模、五次多项式jerk约束轨迹生成、45°倾斜车位优化求

weixin_34267123的博客 525

用 XDoclet 减少代码膨胀

开放源代码的 XDoclet 代码生成引擎,是许多领先的 Java 框架不可缺少的组成部分,常常被用作面向属性的编程和持续集成的引擎。但是 XDoclet 还有一些不太惹人注目的地方:对初级开发人员来说,它太难掌握、太难精通。在这篇文章中,流行作者 Sing Li 以 XDoclet 为对象,揭示了其内部简单却优雅的设计,使您能够理解这项技术,并将它应用在实践当中。XDoclet 能够很容易成

joy的专栏 1335

基于STM32的PID恒温恒湿控制系统 | 保姆式教程 开源可复刻

本项目基于STM32F103C8T6核心控制器,完整实现了基于双路PID算法的恒温恒湿闭环控制系统,覆盖高精度温湿度采集、双模式控制、参数在线配置、异常安全保护、掉电记忆等全功能,全程采用无跳步保姆式教学,从硬件选型、接线、CubeMX配置、代码开发、调试排坑全流程拆解,跟着步骤一步步操作,就能顺利完成项目复刻

ZhongWeiXiang9的博客 345

XDOCLET

Xdoclet基本概念 我们可以在java代码中使用类似于javadoc的注释,来表达更多的内容。这些额外的注释,通过使用xdoclet工具,我们可以将它们转换为我们需要的各种配置文件。先看一个简单的例子: 比如有一个java文件的源代码如下: /** * @hibernate.class * table="T_Party" */ public class Party { ...

iwillbegenius1的博客 244

双目相机立体匹配算法概述(含Python代码)

立体匹配任务是计算机视觉中的一个重要问题,旨在从一对具有相同场景的图像中估计每个像素的视差(disparity)。本文对现有的传统算法和深度学习算法进行了综述,以便于各位选择合适的立体匹配算法用于深度估计或三维建模。

m0_59257547的博客 8291

点餐系统数据库设计--SQL Server

友情链接 1、学生成绩管理系统数据库设计–MySQL 学生成绩管理系统数据库设计–MySQL 2、医疗信息管理系统数据库–MySQL 医疗信息管理系统数据库–MySQL 3、邮件管理数据库设计–MySQL 邮件管理数据库设计–MySQL 4、SQL Server医疗信息管理系统数据库【英文版-源码】–(Medical Management System Database) SQL Server医疗信息管理系统数据库【英文版-源码】–(Medical Management System Database) 5

若如初见 8万+

深入学习RabbitMQ(一):mandatory标志的作用

下面我们通过几个实例测试下mandatory标志的作用:        测试1:设置mandatory标志,且exchange未绑定队列 public class ProducerTest { public static void main(String[] args) { String exchangeName = "confirmExchange"; String queueNa

扇扇来驰的博客 9457

网络调试和分析工具 Proxyman Premium

它支持MacOS、iOS和iPadOS等操作系统,提供丰富的功能,如查看和编辑HTTP/HTTPS请求和响应、设置断点、过滤请求等。Proxyman Premium还支持WebSocket、GraphQL和gRPC等现代网络协议调试,并通过直观且图形化的操作界面,使用户能高效地监控和操纵网络数据流。此外,它还具备多种高级功能,如WebSocket支持、DNS欺骗、自定义SSL证书等,为开发人员提供极大的便利。同时,由于软件版本更新和界面调整,上述步骤可能会有所变化,建议您参考最新版本的官方文档进行操作。

llhf688的博客 1997

RabbitMQ的mandatory参数测试

一代码 package com.rabbitmq; import com.rabbitmq.client.*; import com.rabbitmq.util.ConnectionUtils; import java.io.IOException; import java.util.concurrent.TimeoutException; /** * 生产者Mandatory参数测试 ...

实践求真知 625

Oracle EBS报表开发入门:Report Builder安装避坑指南(Win10/11兼容版)

本文详细介绍了在Windows 10/11系统上成功安装和配置Oracle Report Builder的完整避坑指南。通过修改系统兼容性、解决虚拟内存报错、正确设置NLS_LANG和TNS连接等关键步骤,确保开发环境稳定运行。同时,阐述了Report Builder与BI Publisher在现代Oracle EBS报表开发中的协作定位与工作流,帮助开发者高效搭建报表开发环境。

d6e7f8的博客 754

华为OD机试双机位C卷-流水线(Py/Java/C/C++/Js/Go)

华为OD机试双机位C卷 流水线,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解。华为OD机试 - 流水线。

qq_45776114的博客 2265

Xdoclet的标签及用法

参照链接: Xdoclet的标签及用法

想飞的鱼 145

西门子G120变频器在立体仓库堆垛机应用参数设置

本文详细介绍了G120 CU240E及CU250S变频器的参数设置流程。主要内容包括:1)快速调试步骤,从新建项目、扫描节点到设置电机类型、负载类型等参数;2)抱闸参数设置方法;3)参数下载异常时的处理方案。重点说明了通过STARTER软件进行向导式调试的完整过程,包括电机铭牌参数输入、识别方式选择等关键环节,并提示了通讯连接注意事项。当下载失败时,提供了通过导入导出项目文件解决问题的具体方法。

xdpcxq的专栏 863

定制xdoclet 标签

定制自己的xDoclet标签xDoclet是一种通过读取JAVA源文件中的特定标签,然后生成指定文件的工具。xDoclet标签本身已经提供了一些常用的标签,例如@ejb,@hibernate,@web等等,但是仍然不能满足我们的需求。 例如我们最新的项目中引用了一个Javascript验证框架,通过配置特定的xml配置文件,即可完成客户端表单验证,但是不想开发人员再去学习一套框架,于是想让

蒋剑锋的专栏-java技术 829

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

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

xDoclet是一种通过读取JAVA源文件中的特定标签,然后生成指定文件的工具。xDoclet标签本身已经提供了一些常用的标签,例如@ejb,@hibernate,@web等等,但是仍然不能满足我们的需求。    例如我们最新的项目中引用了一个Javascript验证框架,通过配置特定的xml配置文件,即可完成客户端表单验证,但是不想开发人员再去学习一套框架,于是想让开发人员在源代码中写@java

陈建慧程序人生 768

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

XDoclet

XDoclet 学习笔记©原作者:Rick Hightower   北漂男人整理•XDoclet概要:    XDoclet 是一个通用的代码生成实用程序,是一个扩展的Javadoc Doclet引擎(现已与Javadoc Doclet独立),XDoclet是EJBDoclet的后继者,而EJBDoclet是由Rickard Oberg发起的。(http://xdoclet.sou

cmtony2008的专栏 534

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

《XDoclet in Action》部分章节中文版

转自:http://www.javaresearch.org/article/showarticle.jsp?column=331&amp;thread=26106 XDoclet起步XDoclet是一个代码生成工具,它可以把你从Java开发过程中繁重的重复劳动中解脱出来。XDoclet可以让你的应用系统开发的更加快速,而你只要付比原先更少的努力。你可以把你手头上的冗长而又必需的代码交给它帮你完成...

编程开发资料库 88
上一篇: Log4j的简单配置使用!
下一篇: Spring指南(官网)
phoenixup
博客等级 码龄23年 2粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值