如何在grails中的选择框中显示父域字段

时间:2015-02-12 10:41:34

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

我使用的是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'

有人可以帮我吗?!!!有没有办法做到这一点?

3 个答案:

答案 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列表。