阅读更多

4顶
0踩

编程语言

原创新闻 在NetBeans IDE中创建Grails插件

2008-07-28 09:28 by 资深编辑 ╱/罒呍唲 评论(1) 有5570人浏览

在NetBeans IDE中创建Grails插件,下面是一个最简单的例子,只是给你展示流程,最有用的文章我推荐下面这些:

    *      The Plug-in Developers Guide
    *      Phone Number Custom Constraint for Grails
    *      My first Grails plugin

读完这三篇内容,你已经了解足够信息,但是我发现事情并不那么简单,所以我写了下面这个教程,希望对你有用。

创建插件

1。在command中输入:

grails create-plugin SamplePlugin


运行这行代码后,你已经有一个Grails的插件。

2。在NetBeans中打开这个插件。



打开文件窗口(Ctrl-2),这个窗口展示了更多信息:



打开"SamplePluginGrailsPlugin.groovy"文件,然后你能看到下面代码:

class SamplePluginGrailsPlugin {
    def version = 0.1
    def dependsOn = [:]
	
    def doWithSpring = {
        // TODO Implement runtime spring config (optional)
    }
   
    def doWithApplicationContext = { applicationContext ->
        // TODO Implement post initialization spring config (optional)		
    }

    def doWithWebDescriptor = { xml ->
        // TODO Implement additions to web.xml (optional)
    }
	                                      
    def doWithDynamicMethods = { ctx ->
        // TODO Implement registering dynamic methods to classes (optional)
    }
	
    def onChange = { event ->
        // TODO Implement code that is executed when this class plugin class is changed  
        // the event contains: event.application and event.applicationContext objects
    }
                                                                                  
    def onApplicationChange = { event ->
        // TODO Implement code that is executed when any class in a GrailsApplication changes
        // the event contain: event.source, event.application and event.applicationContext objects
    }
}



3。现在我们来创建,让代码能够提供新的“约束”。我们需要扩展org.codehaus.groovy.grails.validation.AbstractConstraint,在src/groovy

目录中。

import org.codehaus.groovy.grails.validation.AbstractConstraint
import org.springframework.validation.Errors

class BestFrameworkConstraint extends AbstractConstraint {

    private static final String DEFAULT_MESSAGE_CODE = "default.answer.invalid.message";
    public static final String NAME = "oneCorrectResponse";

    private boolean validateConstraint

    //The parameter which the constraint is validated against:
    @Override
    public void setParameter(Object constraintParameter) {
        if (!(constraintParameter instanceof Boolean))
            throw new IllegalArgumentException("Parameter for constraint ["
                    + NAME + "] of property ["
                    + constraintPropertyName + "] of class ["
                    + constraintOwningClass + "] must be a boolean value");
        this.validateConstraint = ((Boolean) constraintParameter).booleanValue()
        super.setParameter(constraintParameter);
    }

    //Returns the default message for the given message code in the current locale:
    @Override
    protected void processValidate(Object target, Object propertyValue, Errors errors) {
        if (validateConstraint && !validate(target, propertyValue)) {
            def args = (Object[]) [constraintPropertyName, constraintOwningClass,
                    propertyValue]
            super.rejectValue(target, errors, DEFAULT_MESSAGE_CODE,
                    "not." + NAME, args);
        }
    }

    //Returns whether the constraint supports being applied against the specified type:
    @Override
    boolean supports(Class type) {
        return type != null && String.class.isAssignableFrom(type);
    }

    //The name of the constraint, which the user of the plugin will use
    //when working with your plugin.
    @Override
    String getName() {
        return NAME;
    }

    //Validate this constraint against a property value,
    //In this case, ONLY "Grails" is valid, everything else will cause an error:
    @Override
    boolean validate(target, propertyValue) {
        propertyValue ==~ /^Grails$/
    }

}


4。然后回到我们之前看到的Groovy插件类,把类放入插件,使用doWithSpring闭包来做:

def doWithSpring = {
    ConstrainedProperty.registerNewConstraint(
        BestFrameworkConstraint.NAME,
        BestFrameworkConstraint.class);
}

4。现在回到command,进入SamplePlugin目录,然后运行
grails package-plugin

回到NetBeans,检查上一条命令创建的ZIP文件

这个zip文件就是你的Grails文件。

安装插件

现在我们将这个插件安装进入一个新的应用

1。使用一个新的项目Wizard创建一个Grails应用(Ctrl-Shift-N) 和选择一个Groovy | Grails应用,点击Next并且输入"SampleApplication",然后点击Finish。

2。当NetBeans完成"grails create-app"命令,你将能看到新的应用在NetBeans中打开。右键点击选择"Plugin",如下图显示:



3。在Grails插件对话框中,提示了很多基础的创建你需要安装,我们将选择我们自己开发的插件。点击浏览器选择我们创建的ZIP文件。


4。点击安装,同时在这个页面你也可以卸载。



5。在文件窗口查看一下你的应用,发现你的插件加入了,并且被解压缩了。



使用插件提供的功能

1。现在让我们来使用这个插件吧!创建一个domain class,叫它"Quiz",右键点击"Domain Classes",并却选择"Create new Domain Class":



2。右键点击"Controllers" 节点,选择"Create new controller",输入"Quiz",点击Finish,使用Groovy编辑器来增加一个scaffolding。



3。回到"Quiz" domain class,增加你的属性,使用在你的插件中定义的"oneCorrectResponse":



4。于是在messages.properties文件将显示信息:



5。运行应用你将看到:



看到这个页面,就要恭喜你,成功完成了!

来自:http://blogs.sun.com/geertjan/entry/hello_grails_plugin
来自: blogs.sun.com
4
0
评论 共 1 条 请登录后发表评论
1 楼 范三山 2008-07-28 09:57
还只是m1,等正式版出了再试试,不过更新太快了............

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 《非程序员》第五期

    征稿启事来稿情况《非程序员》返回首页下载时若不正常或出现“403...Forbidden字样”,请看下载说明>> UMLCHINA以e-book方式发行免费电子杂志《非程序员》,内容涉及软件工程的各个环节:需求,设计,构造,测试,维护,配置管理,管理,过程,工具,质量...    第五期(4.2M)下载点1,下载

  • 《非程序员》第二期

    递交:《非程序员》第二期名    称: 《非程序员》第二期设    计: UMLCHINA编    者: UMLCHINA联系邮件: think@umlchina.com 版    本: 第二期文件大小: 2600KB更新日期: 2001-6-13授权方式: 免费 应用平台: Windows 95/98/Me/NT/2000 主页: http://www.umlchina.com下载地址: h

  • 怎样花两年时间去面试一个人(非程序员慎入)

    这篇文章是刘未鹏大神写的,是从一个面试官的角度去看应聘程序员的人,道出了面试者对应聘者的要求,以及一些面试感受,现分享给大家希望对大家的找工作之路有所帮助。文章比较长,个人总结为以下三点:你读过哪些好书,有过哪些酷的经历(或自己代表性的代码或者技术博客),认识哪些牛人(或你应聘领域的认知情况),这三方面你都能对答如流的话,未来的offer大神就是你。 Joel Spolsky曾经感叹:招聘难,难

  • 专家的恐惧与专家的“反恐”--关于MDA的一篇评论

    (专家孟岩于2003-12-22 0:56:31) 人民邮电出版社最近出版了一本书,叫做《应用MDA》。据我所知,它是国内第一本介绍MDA概念的图书。目前,MDA还处在“油漆未干”的状态,对于我来说,亟需通过阅读一些资料对此项...

  • MDA-专家的恐惧

    人民邮电出版社最近出版了一本书,叫做《应用 MDA 》。据我所知,它是国内第一本介绍 MDA 概念的图书。...的状态,对于我来说,亟需通过阅读一些资料对此项技术建立初步印象。... 反恐尚未成功,专家仍在努力。

  • 技术专家的恐惧症

    专家的恐惧与专家的“反恐” 孟岩 人民邮电出版社最近出版了一本书,叫做《应用MDA》。据我所知,它是国内第一本介绍MDA概念的图书。目前,MDA还处在“油漆未干”的状态,对于我来说,亟需通过阅读一些资料对此项...

  • 《反恐特警组》(S.W.A.T.)影片介绍

    美国彩色宽银幕立体声故事片 反恐特警组 (S.W.A.T.) “韩式美女”中国制造 庆祝三星YEPP新品上市 三星电子再助2004WCG 金犊奖大陆初审揭晓 一、影片介绍 国别:美国 幕幅:宽银幕 制式:SRD/原版 出品:...

  • 关于人脸识别滥用的十个可能的应对方案

    本文对此提供十项人脸识别政策建议,大致从人脸数据、测试技术、认证评估主体三个层面予以... 商业场景纳入opt-in与opt-out机制 制定统一的技术标准 完善标准化组织认证 确保数据代表性以及测试实操化 当前,人...

  • (转)一篇令所有游戏圈的兄弟汗颜的文章

    网游的兴起让许多人开始关注游戏行业,也催生了不少张口就是运营,闭口就是资本操作的“专家”,他们胸有成竹地对一个他么完全不了解的行业指指点点。而我看到的,只是几个暴发户在前面领跑,后面一大群人陆续跟上。...

  • 长文解读:迟到的Libra与即将到来的Commodity 2.0

    长文解读:迟到的Libra与即将到来的Commodity 2.0 原创: 中化能源科技 中化能源科技 今天 2019年6月18日,Facebook发布名为Libra的加密数字货币项目白皮书,标志着数字货币Libra发行计划正式推出。被认为是继2009年...

  • [渝粤教育] 深圳职业技术学院 安全教育与应急处理训练 参考 资料

    -安全教育与应急处理训练-章节资料考试资料-深圳职业技术学院【】 1.1.1 树立科学的安全理念随堂测验 1、【单选题】6、下面哪种思想符合“大安全”的理念? A、“头痛医头,脚痛医脚” B、“临时抱佛脚” C、君子安...

  • 万字长文人脸识别深度研究:发展与市场、市场研究、流程及主要技术、行业应用、产品落地和个人看法

    (一)发展与市场 1、人脸识别的理解: 人脸识别(Face Recognition)是一种依据人的面部特征(如统计或几何特征等),自动进行身份识别的一种生物识别技术,又称为面像识别、人像识别、相貌识别、面孔识别、面部识别等...

  • 20000条笑话保证笑死你

    32.某人在精神病院实习,忽一神经病患者手持一把菜刀向他追来,这人转头就跑,直到跑到一条死胡同,心想这下完了,那个病人说:给你刀,该你追我了。 33.空姐劝乘客系安全带-“上次飞机迫降没系安全带的都摔的...

  • 公开披露:美国如何联合作战并入侵ISIS网络

    而该次行动还召回了大批已经退伍的黑客精英以及专业的反恐人才,比如专攻密码学和网络入侵的网络安全初创公司老板,了解ISIS的反恐专家,数字取证专家,专业的可入侵ISIS网络中关键服务器的人才,恶意软件专家,安全...

  • 因为AI,人类对战争的态度永远改变了

    全文共2469字,预计学习时长5分钟AI在战争中的角色很多人都听说谷歌由于与美国军方的关系而面临身份危机。简而言之,在员工抗议愈演愈烈后,谷歌决定不再续签“Maven项目...

  • 大数据正悄悄地影响着保安服务业

    在2015年全国社会治安立体化防控体系建设会议上,提出建立“传统+现代”、“人力+科技”的风险预警模式后,我国的保安服务企业为适应社会发展的需要,正在积极探索与开发互联网在保安服务与企业内部管理中的应用,...

  • 《请君入瓮——APT攻防指南之兵不厌诈》目录—导读

    一个真正意义的APT攻击作品,站在安全美学或者犯罪美学的角度,甚至可以让许多自负的安全专家产生时空穿越的困惑与惊叹。 从1992年偶尔进入计算机病毒的世界开始游弋信息安全的海洋,时常有柳暗花明的惊喜,却不曾...

  • 大数据:正在到来的数据革命

    “9•11”大拐点:以反恐的名义向左转 万维信息触角计划:追踪恐怖分子的“数据脚印” 6 种改变政府的力量:山姆大叔大退让 下篇 公民故事 第八章 数据开放运动 一个新的世界:从软件开源到数据开放 ...

  • 编程领域的十一大发展趋势

    事实上,不少首要技术公司都在向美国国会抱怨,声称他们不仅无法从美国公民中找到足够多的编程专家,同时也很难在与大龄名校程序员之间关于年龄歧视的诉讼中赢得胜利。 这种现象可能说明, 教育经历的附加值...

Global site tag (gtag.js) - Google Analytics