【问题标题】:grails: show field of object in gspgrails:在 gsp 中显示对象的字段
【发布时间】:2013-08-29 21:17:13
【问题描述】:

在我的 grails 项目中,我创建了一个名为 Patient 的对象的实例,该对象有一个字段 city。

class Patient {

 String name;
 String surname;
 String cf;
 String address;
 String cap;
 String city;
 String province;
 String country;
 String phone_1;
 String phone_2;
 String email;
 String vat;

}

当我创建一个 Patient 时,我通过它的 id 存储城市,但我希望在 show() 和 list() 方法中看到相关城市的名称。

Cities 域类链接到我的数据库中的一个表,如下所示

class Cities {

String cityName;
String capOfCity;
String provinceOfCity;

static constraints = {
}

static mapping = {
    table 's_cap'
    id column: 'idcap'
    cityName column: 'comune'
    capOfCity column: 'cap'
    provinceOfCity column: 'prov'
    version false
}  
}

我想我必须对 db 执行查询以通过 id 获取其名称,但我该如何在 gsp 中执行呢?

【问题讨论】:

  • <div>City: ${patient.city.name}</div>?
  • 能否请您添加域类的相关部分?

标签: sql grails gsp


【解决方案1】:

用你目前的方法,你可以做到

def show(){
   // look up your patient object
   def patient = Patient.get(123)
   def patientCityObject = Cities.findByCityName(patient.city)
   [patientCityObject: patientCityObject ]
}

普惠制:

<p>${patientCityObject.cityName}</p>

然而,

如果您定义了域之间的关联,那么 Grails 将在您访问时加载您的城市。要访问与 Patient 关联的城市对象,您可以将其定义如下:

class Patient {
 ...
 Cities city;
 ...

}

然后,当您拥有耐心对象时,您可以轻松访问其属性城市。

def patient = Patient.get(123)
patient.city.cityName

这将为您提供与患者关联的城市对象。然后你可以将它传递给你的 GSP 并使用它。

要了解有关 GORM 和对象关系的更多信息,您可以阅读Object Relational Mapping

【讨论】:

  • 如果我只更改字段城市的类型,这种方法是否有效?那是因为在 Patient 创建表单中,我有一个 select 填充了相关 db 表的所有城市,并且在更改 select 中的值后,另一个字段使用 javascript 方法更改
  • 将其更改为类型 Cities 将存储 ID,Grails 将为您加载城市对象。如果您想将它作为我提到的字符串使用findByCityName 来查询数据库。两者都起作用,这取决于您要如何设计模型。
  • 我想第一种方法必须放入控制器中......但是如何仅在 gsp 中做同样的事情?
  • 耐心.city 值是存储到数据库中的值吗?如果是,不是城市名称而是城市ID,所以函数不是findbycityname...那么正确的调用方法是什么?
  • 首先您采用哪种方法?在您的current approach Cities.findByCityName(patient.city) 上会给您城市名称。我更新了我的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-28
  • 2011-09-20
  • 2015-04-01
  • 2017-11-02
相关资源
最近更新 更多