2011-08-17 54 views
0

此問題是here問題的延續。將Grails邏輯從視圖移至控制器

下面的代碼是從我的意見之一,它工作正常,但我有困難將此代碼移動到控制器。如果我的包和類在下面的代碼中不清楚,請查看上一個問題以瞭解它們的排列方式。

<g:set var="roleAdmin" value='${org.me.example.userrole.Role.findByAuthority("ROLE_ADMIN")}' /> 
<g:set var="roleOfficeProfessional" value='${org.me.example.userrole.Role.findByAuthority("ROLE_OFFICE_PROFESSIONAL")}' /> 
<g:set var="roleDriver" value='${org.me.example.userrole.Role.findByAuthority("ROLE_DRIVER")}' /> 
<g:select name="loggedBy.id" from="${org.me.example.userrole.UserRole.findAllByRoleInList([roleAdmin, roleOfficeProfessional, roleDriver]).user}" optionKey="id" value="${loadInstance?.loggedBy?.id}" /> 

這可能是我的一個基本的誤解,但我不能得到任何的是Grails的創造,我在我的控制器已經改變了我的意見,工作方法,只有方法(即listcreatedeleteedit等)將起作用。任何援助/建議都會有所幫助。

回答

2

from and value屬性不是來自控制器中的方法/操作。它們通常來自請求對象。我給你在其他線程正確地做到這一點的代碼,但這裏要再次重申,略爲詳細...

class SomeController { 

    def show = { 
    def loadInstance = whateverYouGetItFrom 
    def users = UserRole.findAllByRoleInList([roleAdmin, roleOfficeProfessional, roleDriver]).user 
    [loadInstance:loadInstance,users:users] 
    } 
} 

然後你就會有一個包含

<g:select name="loggedBy.id" from="${users}" optionKey="id" value="${loadInstance?.loggedBy?.id}" /> 
一個show.gsp

如果我誤解了你的問題,請給我們更多的細節。

+0

格雷格的答案是現貨。我要添加的唯一說明是注意[loadInstance:loadInstance,users:user]是從控制器向視圖傳遞數據的重要部分。代碼行代表「返回」或將地圖傳遞給視圖。它使地圖中的項目內容可用於gsp中的$ {}模板語法。對不起,如果這是重複的或過於簡單化的解釋,但似乎這是混淆成立的地方。 –

+0

@ Bill Pfeiffer不,歡迎解釋。我在業餘時間學習Grails/Groovy,花了2個月時間休息並忘了很多。格雷格的回答讓我有了面子。該'option鍵=「ID」'在我看來參數創建一個錯誤,我仍然在什麼'value'說法實際上是在做有點不清楚......但我可以在這兩個讀了。我唯一的問題是如何從視圖傳遞參數給控制器?我理解控制器的'[key:value]'部分,但是當我使用'from =「$ {users}」'時,我怎樣將一個參數傳遞給控制器​​? – ubiquibacon

+0

爲什麼你需要將視圖中的東西傳遞給控制器​​來填充SELECT? – Gregg

相關問題