1

私はGrailsの開発に不慣れ<g:select> で、複数選択リストに使用するときに問題が発生しました。私のフォームでは、ユーザーは複数選択リストボックスで1〜6個のオプションを選択できます。その後、編集ビューに戻って変更を加えることができます。

フォームは選択されたすべてのオプションを正常に保存しますが、複数のオプションが選択された場合、リストボックスには編集ビューで選択されたものが表示されません。ただし、オプションを1つだけ選択した場合は、編集ビューに正しく表示されます。

選択したすべてのオプションが編集ビューに表示されるように修正する方法を教えてください。(Running Grails 2.0.3)

<g:select>これがGSPの私のコードです:

<g:select selected="true" multiple="true" name="securityGroup"
          from="${['Mainframe', 'Finance', 'EDI', 'Item Master', 'Risk Management', 'Telecomm']}"
          value="${MFAdminInstance?.securityGroup}"/>

ドメイン:

クラスMFAdmin{

static constraints = {

    name(nullable:false, blank:false, unique:true)
    briefDetail(nullable:false, blank:false)
    details(blank:false)
    recsz(nullable:false, blank:false)
    securityGroup(nullable:false, blank:false)
    files(nullable:false, blank:false)
    begJCL(nullable:false, blank:false)
    addJCL1(nullable:true, blank:true)
    addJCL2(nullable:true, blank:true)
    endJCL(nullable:false, blank:false)

}

String name
String briefDetail
String details
String recsz
String securityGroup
Integer files
String begJCL
String addJCL1
String addJCL2
String endJCL

}

4

1 に答える 1

0

値 ${MFAdminInstance?.securityGroup} がリストであることを g:select タグに対してより明確にしてみてください。私は次のようなことを提案します:

${MFAdminInstance?.securityGroup?.toList()}

私はあなたのコードを次のようなものでモックすることができました:

<g:form action="update">
<g:select selected="true" multiple="true" name="securityGroup"
          from="${['Mainframe', 'Finance', 'EDI', 'Item Master', 'Risk Management', 'Telecomm']}"
          value="${bars}"/>
 <g:submitButton name="submit" />
 </g:form>

そして、投稿を処理するアクション foo2 内で:

def update() {
    render(view: 'foo', model: [
            bars: params.securityGroup.toList()
    ])
}

gsp で使用するリストを定義したときにbarsわかるように、params.securityGroup がリストであることを明示的に伝える必要がありました。最後にそれがなければtoList()、動作は複数選択の欠落した選択でした。

編集:

..inMFAdminInstance...

List<String> securityGroup

コントローラーでは、選択した投稿値を次のような方法でドメインに保存できます...

def mf = new MFAdminInstance()
mf.securityGroup = params.securityGroup?.toList()
于 2012-06-27T21:09:59.260 に答える