2012-12-11 84 views
1

看起來很簡單,但顯然非常困難。將(有限和已知長度的)一系列複選框綁定到grails命令對象上的布爾值列表。當然可以用命令對象「填充」來恢復視圖,並使用先前選擇的值。將多個複選框綁定到Grails列表中

E.g我有一個Grails的Webflow。它通過將4個複選框綁定到布爾列表中的條目開始。它切換到下一個狀態並打印值 - 例如[真,真]。導航回來,所有的複選框都是空的(這非常合理 - 4個複選框,只有兩個值)。所以它應該是例如[假,真,假,真]。

不管我做什麼,我似乎無法做到這一點。在春天它會很容易,只需將複選框綁定到值[0] .. [3] ...爲什麼Grails中這麼簡單這麼簡單!

請幫幫忙,這將真正讓我開心!

示例命令的OBJ:在控制器

class TestCmdObj {  
    List<Boolean> boolListOne = [] 
} 

實施例結合方法(在流動作用執行閉合):

private def doBindAndValidateBoolList = {  
    bindData(flow.testCmdObj, params, [include:['boolListOne']]) 
} 

到目前爲止好。這顯示在流動翻頁時的實際工作中,testCmdObj.boolListOne顯示選中的複選框真正..

的GSP代碼很簡單,並使用:

<g:checkBox name="boolListOne"/> 
<g:checkBox name="boolListOne"/> 
<g:checkBox name="boolListOne"/> 
<g:checkBox name="boolListOne"/> 

在未來的看法,我可以打印出$ {testCmdObj.boolListOne},並打印出儘可能多的「真」值,因爲我檢查了..(例如[true,true])如果我導航回來,複選框是emtpy ...哪一個,我可以理解,因爲他們都有相同的名字...

+0

添加命令的來源。 –

+0

哪個來源?那個不起作用的那個?哪一個嘗試呢? ..好吧,我會發布一些源代碼...:) – Hoof

+0

是的,它很容易看到發生了什麼:) –

回答

0

好吧,所以以this作爲參考:

Grails的需要與現有列表,將與從reques數據填充 一個命令。

所以,你需要做的是:

類TestCmdObj {
列表boolListOne = ListUtils.lazyList([],FactoryUtils.instantiateFactory(布爾)) }

此外,您的gsp需要遍歷您的命令以顯示每個條目,例如:

<g:each in="${myCommandInstance.boolListOne}" var="boolInstance" status="i"> 
<g:checkbox name="boolListOne[${i}]" value="${boolInstance}" /> 
</g:each> 

這樣,你的gsp中的每個複選框將作爲列表中的一個條目對應。

編輯:似乎對於原始類型的包裝,不需要使用工廠。

+0

它不會接受工廠建設......「不適用於...... $ _closure ...」的方法。所以它似乎不會接受Facory /封閉結構..你有沒有試過這個? – Hoof

+0

不,我沒有測試,因爲我有時使用這個。看看我的代碼,這有點不同,請參閱使用FactoryUtils進行編輯。 –

+0

是的,試過這個。同樣的結果。 – Hoof