2012-10-05 31 views
0

我需要創建一個自定義的GSP,其領域模型設計如下未關閉的GSP表達:Grails的GSP引擎不能解決嵌套GSP表達

class Question { 

    SortedSet<Choice> choiceCollection; 

    static hasMany = [choiceCollection:Choice] 
    static mappping = { 
     choiceCollection(joinTable:false) 
    } 

} 

每個課題對象有五種選擇。所以,我創建了下面的代碼片段

create.gsp

<g:each var="i" in="${(1..5)}"> 
    <div class="fieldcontain required"> 
    <label for="description"> 
      Option ${i}. 
      <span class="required-indicator">*</span> 
     </label> 
     <g:textArea name="choiceCollection[${i}].description" cols="40" rows="5" maxlength="2000" value="${questionInstance?.choiceCollection[${i}]?.description}"/> 
    </div> 
</g:each> 

雖然Grails的GSP發動機抱怨未關閉的GSP表達這是不正確的 - G:textarea的被關閉,你可以在上面看到 - ,我相信真正的問題是表達式

${questionInstance?.choiceCollection[${i}]?.description} 

它涉及嵌套的GSP表達式。

問題:我是否缺少一些功能?如果是這樣,我該怎麼做才能克服我的障礙?

的Grails版本:2.1.1

回答

2

不應該

${questionInstance?.choiceCollection[${i}]?.description} 

${questionInstance?.choiceCollection[ i ]?.description} 

位的設置位:

試着這麼做:

<g:each var="choice" status="i" in="${questionInstance?.choiceCollection}"> 

所以i仍然包含索引,但choice包含了什麼你試圖讓與questionInstance?.choiceCollection[${i}]

+0

感謝(+1)。現在,在用TreeSet初始化SortedSet之後,我得到了沒有方法的簽名:java.util.TreeSet.getAt()適用於參數類型:(java.lang.Integer)?你知道爲什麼嗎 ?我該怎麼做才能運行我的應用程序? –

+0

是的,你不能從一個Set,甚至一個SortedSet中獲取位置元素:-(你可能想從Set設置到一個List,或者將這些項目保存在List中,並使用list.unique()。 sort()'來模擬你從'TreeSet'得到的功能,或者你可以使用'each'來迭代集合,而不是試圖使用整數索引,即:'([1,2,3]作爲TreeSet).each {println it}' –

+1

@ArthurRonaldFDGarcia添加了一些關於替換'each' –