1

簡単そうに見えてなかなか難しい。(有限で既知の長さの) 一連のチェックボックスを grails コマンド オブジェクトのブール値のリストにバインドします。もちろん、以前に選択した値を使用して、ビューを復元するコマンド オブジェクトを「入力」することも可能です。

たとえば、grails webflow があります。ブール値リストのエントリに 4 つのチェックボックスをバインドすることから始めます。次の状態に切り替わり、[true,true] などの値を出力します。戻ると、すべてのチェックボックスが空になります (これは完全に理にかなっています - 4 つのチェックボックスと 2 つの値のみ)。したがって、むしろ [false, true, false, true] のようにする必要があります。

私が何をしても、これを実現することはできないようです。春なら簡単に、チェックボックスを value[0]..[3] にバインドするだけです... Grails ではなぜこれほど単純なことが難しいのでしょうか?!

助けてください、それは本当に私の一日になるでしょう!

コマンドオブジェクトの例:

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

コントローラーでのバインディング メソッドの例 (フロー アクションで実行されるクロージャー):

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

ここまでは順調ですね。これは、フローの次のページを表示するときに実際に機能します.testCmdObj.boolListOneは、チェックされたチェックボックスに対してtrueを表示します..

GSP コードは単純で、以下を使用します。

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

次のビューでは、${testCmdObj.boolListOne} を出力できます。チェックした値と同じ数の「真」の値が出力されます ([true, true] など)。戻ると、チェックボックスは空です。 .. 繰り返しになりますが、それらはすべて同じ名前を持っているため、理解できます...

4

2 に答える 2

0

わかりましたので、これを参考にしてください:

Grails は、reques からのデータで満たされる既存のリストを持つコマンドを必要とします。

だからあなたがする必要があるのは:

class TestCmdObj {
List boolListOne = ListUtils.lazyList([], FactoryUtils.instantiateFactory(Boolean) ) }

また、gsp はコマンドを繰り返し処理して、次のようにすべてのエントリを表示する必要があります。

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

これにより、gsp のすべてのチェックボックスがリスト内の 1 つのエントリとして対応します。

編集:プリミティブ型のラッパーの場合、ファクトリを使用する必要はないようです。

于 2012-12-11T23:13:04.987 に答える