一步一步学grails:3 脚手架

大家可以到此处下载。

1、  修改“生产编号”域类代码

grails-app/domain/ProductionNo.groovy:

class ProductionNo {

    CooperationUnit coo             //协作单位

    String prefix               //前缀:2位年份+"-"+2位月份

    String suffix               //后缀

    int sno                         //中缀:2位顺序编号

    static belongTo=[CooperationUnit]//定义1对多关系,即1个协作单位对应多个生产编号

    static constraints = {

       coo(blank:false)

        suffix(inList:["/u6025","/u6025/u53E6","/u60251","/u60252","/u60253","/u60254","/u60255"])//后缀值只能从列表中选取,其中中文用native2ascii编码

    }

    String toString(){

       "${coo.shortName}${prefix}-${sno}${suffix}"

    }

    static optionals=["prefix","sno"]

}

2、  在浏览器中查看新建生产编号页面:

可以看到新建记录的coo(协作单位)字段是一个下拉列表,其中列出了所有协作单位的id。现在我们把它改为协作单位的简称。打开grails-app/domain/CooperationUnit.groovy/Create.gsp,增加一个toStirng方法:

String toString(){

    "$shortName"

}

刷新页面,已变为:

3、  由于“生产编号”中的前缀是由2位年份和2位月份构成的,sno应该是按月进行顺序编号的,这两个字段最好是由系统自动生成,不应该由用户进行编辑。因此要把这两个文本框的只读属性变成true。打开grails-app/views/productionNo/Create.gsp文件,将这两个表单标签中加上readonly属性:

<input type="text" id="sno" …… readonly/>

然后,在grails-app/controlers/ProductionNoController.groovy中,修改控制器中关于Create的逻辑,:

def create = {

        def productionNoInstance = new ProductionNo()

        SimpleDateFormat sdf = new SimpleDateFormat("yy-MM")//日期格式:yy-MM

        Date date=new Date()  //取当前日期

        params.prefix=sdf.format(date) //取当前日期的2位年份和2位月份存入参数中的prefix

//查找prefix=params.prefix的记录,sno倒序排列.注意find方法只返回第一条记录

        def list=ProductionNo.find("from ProductionNo as a where a.prefix=? order by a.sno desc",[params.prefix])

        int sno=0

        if(!list)sno=1//如果该月份尚无记录,编号从1开始

        else{//否则从该月最大编号后续编起

sno:${list.sno},suffix:${list.suffix}")

        sno=list.sno+1//在原有编号基础上接着往下编

        }

        params.sno=sno

        productionNoInstance.properties = params//给新建的ProductionNo对象属性设值

        return ['productionNoInstance':productionNoInstance]

}

刷新页面,效果变为:

其中,“年月”和“当月编号”栏的内容是控制器中的Create这个Action(动作)自动生成的。

4、  修改域类ProductionNo,为其增加一个toString方法,这个方法在将来会有用处:

String toString(){       String.format('%1$%2$-%3$02d%4$',coo.shortName,prefix,sno,suffix)

}

5、  当新建一个生产编号后,页面会转到show.gsp,在这里显示新插入的记录。我们需要在这个页面调用toString方法,以显示对象经过格式化转换后的字符串。打开grails-app/views/productionNo/show.gsp,编辑以下内容:

<div class="body">

            <h1>${productionNoInstance }</h1>

            <g:if test="${flash.message}">

注意红色部分的代码,这会自动调用toString 方法。因此当新建完一个生产编号后,页面显示如下:

注意页面顶部显示了ProductionNotoString方法后的结果。

6、   

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值