我使用的是grails 2.1.0。我需要在gsp页面的select框中通过父链显示父域的字段值。但我收到了错误。到目前为止,我已尝试如下::
我的第一个域名包含名为adtAuditPack的父母>>>
class AdtAuditorSchdlPack {
......
static belongsTo = [adtAuditPack: AdtAuditPack,fiscalYear:FiscalYear]
......
}
我的上一个域名的第一个父母名为AdtAuditPack>>>
class AdtAuditPack {
......
static belongsTo = [auditFirm:AuditFirm]
......
}
adtAuditorSchdlPack的第二个父母名为AuditFirm>>>
class AuditFirm {
......
String auditFirmName
......
}
现在我想将auditFirm名称显示为optionValue,将AdtAuditorSchdlPack.id显示为optionKey。为此,我有如下选择>>>
<g:select id="auditPack0" name="auditPack0" from="${AdtAuditorSchdlPack?.adtAuditPack?.auditFirm}" style="width: 200px;"
optionKey="id" optionValue="auditFirmName" noSelection="['': 'Select One']"
required="" class="form-control"/>
它显示了以下工具提示&gt;&gt;
无法从静态上下文
引用非静态符号'adtAuditPack'
有人可以帮我吗?!!!有没有办法做到这一点?
答案 0 :(得分:1)
您可以在Service / Controller上构建下拉列表,并通过modal传递给gsp页面并使用。
控制器/服务方法如下所示:
def c = AdtAuditorSchdlPack .createCriteria()
def results = c.list() {
and{
// your criteria logic
}
order('id', 'asc')
}
根据您的逻辑构建列表:
List auditFirmList= new ArrayList()
results.each { AdtAuditorSchdlPack adtAuditPack->
dataReturns.add([id: adtAuditPack?.auditFirm?.id, name: "${adtAuditPack?.auditFirm?.auditFirmName}"])
}
现在您可以通过模型传递此列表并使用下拉列表,如下所示。
<g:select class=" form-control" id="auditPack0" name='auditPack0'
noSelection="${['': 'Select one...']}" from="${auditFirmList}" optionKey="id" optionValue="name"></g:select>
optionKey和optionValue可能会在gsp视图页面中出现红色标记,但会在运行时生效。
答案 1 :(得分:0)
在您的控制器上编写一个动作,该动作由您所需的gsp页面中的ajax调用。该操作将在页面加载函数中调用。在您的控制器中编写一个查询,例如您加入3域的位置,并将其附加到您的gsp字段。
答案 2 :(得分:0)
看起来你必须调整你的属性。它必须包含某种列表。
看起来应该是这样的:
<g:select id="auditPack0" name="auditPack0" from="${AdtAuditorSchdlPack.list()}" style="width: 200px;"
optionKey="adtAuditPack?.auditFirm?.id" optionValue="adtAuditPack?.auditFirm?.auditFirmName"
noSelection="['': 'Select One']" required="" class="form-control"/>
或者可以直接从您的控制器提供AuditFirms列表。