2017-06-09 62 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>