Grails - 如果值为负,则将值显示为0

时间:2016-03-13 03:08:40

标签: grails grails-domain-class grails-controller

Table of Asset

这是<div id=container> <img id=thepic src="http://i.imgur.com/s9J4MnI.jpg"> <div id=color_layer></div> <span id=content><img id=letter src="http://i.imgur.com/CB1vUqy.png" alt=img><h1>&nbsp;書面</h1></span> </div>

中的公式代码
asset.groovy

如果值公式得到的值是-ve,我需要将Value声明为0。 我该怎么做,是在控制器还是域中?

我在Controller

中尝试了这个
static mapping = {
    yearNow formula: 'YEAR(purchase_date)'
    yearlyValue formula: 'PURCHASE_AMOUNT / LIFE_EXPECTANCY'
    value formula: 'PURCHASE_AMOUNT / LIFE_EXPECTANCY * (LIFE_EXPECTANCY - (YEAR(NOW()) - YEAR(purchase_date)))'
}

3 个答案:

答案 0 :(得分:1)

嘛!现在我无法尝试我给你的建议但是在grails docs中很好地说公式使用持久性模型而不是对象模型,因此它也允许添加hql查询。

因此,您可以尝试使用hql查询CASE语句。

This blog很好地展示了使用hql的例子。

以下内容适用于您的情况:

static mapping = {
    yearNow formula: 'YEAR(purchase_date)'
    yearlyValue formula: 'PURCHASE_AMOUNT / LIFE_EXPECTANCY'
    value formula: 'CASE WHEN PURCHASE_AMOUNT / LIFE_EXPECTANCY * (LIFE_EXPECTANCY - (YEAR(NOW()) - YEAR(purchase_date))) <0 THEN PURCHASE_AMOUNT / LIFE_EXPECTANCY * (LIFE_EXPECTANCY - (YEAR(NOW()) - YEAR(purchase_date))) ELSE 0'

另外,如果您不想对公式使用查找程序或条件查询,则另一个解决方案是为瞬态属性创建自定义getter方法,并获得如下所示的预期值:

public double getValue(){
    double value = 0.0d //calculate value here
    return  (value <0 ? 0 : value)
} 

希望它有所帮助!!

答案 1 :(得分:1)

只需覆盖域内value的getter方法,即可检查-ve值。

public double getValue(){
    value < 0 ? 0 : value
}

答案 2 :(得分:1)

感谢您的帮助,答案是

 value formula: 'GREATEST(PURCHASE_AMOUNT / LIFE_EXPECTANCY * (LIFE_EXPECTANCY - (YEAR(NOW()) - YEAR(purchase_date))), 0)'