利用grails的flash属性简单实现前台校验功能

   flash对象是一个map,用于保存键值对,这些数据会被保存到session中,并在下个请求结束后清除。所以说,flash是session中一个临时保存数据的map,只能传递到下一个请求,请求完毕后数据自动清除。

    话不多说,先描述下业务情况:一笔进货数量是N台笔记本的进货单,创建销售单时要判断销售数量是否超出进货单商品的数量。

    我的代码如下:
        def number = params.number
        def amount = params.amount
        def importProduct = ImportProduct.findByNumber(number)

        def importProductAmount = importProduct.getAmount()
        def hql = "select sum(p.amount) from ExportProduct p where p.number='"+number+"'"
        def result = ExportProduct.executeQuery(hql)
        def resultAmount
        if (result == [null])
        {
            resultAmount = 0
        }
        else
        {
            resultAmount = result[0]
        }
        println resultAmount
        def remain = importProductAmount - resultAmount
        if (amount.toLong() > remain)
        {
            flash.message = "对不起,该批货物数量不够,请重新输入!!"
            redirect(action:"create", params:[productName:params.productName,inPrice:params.inPrice,outPrice:params.outPrice,modelNo:params.modelNo,number:params.number])
            return
        }


这段代码是作为校验时候的,当出现amount.toLong() > remain的情况时,使用flash属性,将信息显示到前台的gsp页面,然后要记得使用return!!


例如:进货的该批次笔记本为8台,在创建销售单时一下子是10台



就会显示如下的效果

        

你可能感兴趣的:(Flash,grails)