2017-06-09 38 views
0

我试图通过我的索引视图中的字段列表进行循环。比方说,我通过以下对index.gsp中:Grails嵌套g:每个

[SomeDomainList: SomeDomain.list(), fields: ['field1', 'field2', 'field3']] 

然后在index.gsp中我有:

<g:each in="SomeDomainList" var="SomeDomainInstance"> 
    <g:each in="fields" var="field"> 
     <td>${SomeDomainInstance.field}</td> 
    </g:each> 
</g:each> 

我想,既然SomeDomainInstance变量被评估,该字段变量将得到也评估。但是,我得到了“没有此类属性:类:SomeDomain”字段。我也尝试过:

<td>${SomeDomainInstance.${field}}</td> 

但是这会导致“未封闭的GSP表达式”错误。任何人都可以告诉我如何实现这一目标?

+0

尝试'​​$ {SomeDomainInstance [现场]}' –

+0

这也为我工作......非常感谢你 – gabalmat

回答

0

尝试增加双引号的例子:

<td>${SomeDomainInstance."${field}"}</td> 

你可以只选择字段,你有兴趣使用条件查询和预测:

def domainList = SomeDomain.createCriteria().list { 
    projections { 
     property('field1') 
     property('field2') 
     property('field3') 
    } 
} 

[SomeDomainList: domainList] 

或者,如果你需要的列名称:

def domainList = SomeDomain.withCriteria{ 
    resultTransformer(CriteriaSpecification.ALIAS_TO_ENTITY_MAP) 
    projections { 
     property('field1', 'field1') 
     property('field2', 'field2') 
     property('field3', 'field3') 
    } 
} 

[SomeDomainList: domainList] 
+0

双引号工作...谢谢!我不敢相信我自己也没有想过要这样做。感谢您提供有关标准查询和预测的更多帮助,这将非常有用。 – gabalmat

+0

如果我没有记错,你也可以使用@ Mike-W建议使用字符串名称执行函数。沿着'domainInstance。'这一行缓缓前进。$ {stringFunctionName}“()',的确如此。这在测试时可能会有帮助。 –

0

为什么人们喜欢GStrings这么多?一个简单的subscript operator会做:

<td>${SomeDomainInstance[ field ]}</td>