网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.java高级编程:基于JNDI的应用开.
.java 实现web 登陆.
.网上收集的部分java资料.
.JDBC基础教程之连接.
.P2P的Jxta解决之道.
.JVM的垃圾回收机制详解和性能调优.
.final数据.
.利用基本数组类型搭建可自扩展的.
.update 和 saveOrUpdate 项目思路.
.使用VS.NET2003重新分发.NET框架.
.Java文件操作详解.
.getUTCHours 方法.
.JTextArea中显示LineNumber.
.利用JAVA操作EXCEL文件.
.Eclipse 3.1 WTP Web程序支持Bee.
.技术评论:明天,中间件在哪?.
.Spring XML配置十二个最佳实.
.J2ME与Web Service-KSOAP的快速上.
.如何获得一个字符的宽度和高度?.
.高手进阶篇:Jive中Jdom使用方法.

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

发表日期:2008-1-5



  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
上一篇:Flex开发步骤——配置过程总结 人气:1450
下一篇:WAS 5.x中数据源的配置使用及常见问题 人气:840
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐