繁体   English   中英

Grails:在域类中重写getter方法

[英]Grails : Overriding getter method in domain class

我无法超越grails getter方法而变得疯狂。

我想要的是使用一个双精度值和一个字符串值来获取格式化的数据,但是当我在String中键入重写方法时,double值为null,而当输入double时,则显然会给我一个错误,因为String是回来 !

我得到这样的域类:

class Project {
    ...
    String currency
    Double initialTargetAmount
        ...
}

第一个Override方法(在这种情况下,initialTargetAmount为null):

//@Override Comment or uncomment it does not make any change to the behaviour
public String getInitialTargetAmount() {
        println "${initialTargetAmount} ${currency}" // display "null EUR"
        "${initialTargetAmount} ${currency}" // initialTargetAmount is null
}

第二种方法:

//@Override Comment or uncomment it does not make any change to the behaviour
public Double getInitialTargetAmount() {
        println "${initialTargetAmount} ${currency}" // display "1000.00 EUR"
        "${initialTargetAmount} ${currency}" // Error : String given, Double expected
}

欢迎任何帮助。

施奈特

Groovy具有动态的getter和setter方法。

因此, initalTargetAmount字段会自动“创建”一个Double getInitialTargetAmount方法。 这就是为什么当您使用Double返回类型时它可以工作的原因。 但是,当您设置StringgetInitialTargetAmount自动引用字段String initalTargetAmount中不存在的String initalTargetAmount

尝试更改方法的名称,例如getInitialAmountWithCurrency() ,它将起作用。 也许您最好的选择是重写toString()方法^^

您的吸气剂应始终与您的字段相同,这不是更改这种吸气剂的好方法,因为Grails(内部处于休眠状态)将了解您的对象实例已更改并会尝试对其进行更新(它将检查旧的实例)。和新值)。

实际上,您正在尝试使用金额的String表示形式,因此您可以选择以下两个选项:

1-一种新方法

创建一个返回String的新方法不会干扰休眠流程,您可以使用它。

class Project {
    ...
    String currency
    Double initialTargetAmount
    ...
    String displayTargetAmount() {
       "${initialTargetAmount} ${currency}"
    }

}

2-TagLib

根据您的需求,您可以创建一个TagLib来对该类进行自定义表示。 这可以包括html格式。

class ProjectTagLib {
  static namespace = "proj"

  def displayAmount = { attrs ->
    if(!attrs.project) {
      throwTagErrro("Attribute project must be defined.")
    }

    Project project = attrs.remove('project')
    //just an example of html
    out << "<p>${project.initialTargetAmount} , ${project.currency}</p>" 

  }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM