技术开发 频道

精通 Grails: GORM - 有趣的名称,严肃的技术

  裸对象

  前面刚刚了解了在 Airline POGO 上添加提示(静态的 hasMany)如何影响表在幕后的创建方式以及前端生成的视图。这种使用裸对象 修饰域对象的模式(请参阅 参考资料)在 Grails 中应用得非常广泛。将这条信息直接添加到 POGO 内,就消除了对外部 XML 配置文件的需求。所有信息都在一个位置内,可以显著提高生产率。

  例如,如果想消除显示在组合框中的主键的泄漏,只要在 Airline 类中添加 toString 方法就可以,如清单 6 所示:

  清单 6. 在 Airline 中添加 toString 方法

class Airline {
  static hasMany
= [trip:Trip]

  
String name
  
String url
  
String frequentFlyer
  
String notes
    
  
String toString(){
    return name
  }
}

  从现在开始,在组合框中显示的值就是航线的名称。这里真正酷的地方在于:如果 Grail 依然在运行,那么只要保存 Airline.groovy,修改就会生效。请在浏览器中新建一个 Trip,看看这样做的效果。因为视图是动态生成的,所以能够迅速地在文本编辑器和浏览器之间来回切换,直到看到合适的视图 — 不需要重新启动服务器。

  现在我们来解决字段按字母顺序排序的问题。要解决这个问题,需要向 POGO 添加另一个配置:static constraints 块。请按清单 7 所示的顺序将字段添加到这个块(这些约束不影响列在表中的顺序 — 只影响在视图中的顺序)。

  清单 7. 修改 Airline 中的字段顺序

class Airline {
  static constraints
= {
    name()
    url()
    frequentFlyer()
    notes()  
  }

  static hasMany
= [trip:Trip]
    
  
String name
  
String url
  
String frequentFlyer
  
String notes
  
  
String toString(){
    return name
  }
}

  将修改保存到 Airline.groovy 文件,在浏览器中新建一个航线。现在里面的字段应该按照在清单 7 中指定的顺序出现,如图 3 所示:

  图 3. 自定义的字段顺序  

  在您准备责备我没有必要在 POGO 中输入两次字段名称而违背 DRY 原则(不要重复你自己)时(请参阅 参考资料),请稍等一下,因为将它们放在独立的块内有很好的理由。清单 7 的 static constraints 块内的大括号不会总是空白。

0
相关文章