2016-03-21 10 views
0

Integerをキーとして使用するマップがありますが、フォームが送信されるとそのキーはStringになります。Grails form submitは、Integerフィールドに文字列を設定します。

1)私はそれが可能であることを理解していません。私のマップは、Integersだけがキーになることができると明言していますが、文字列でデータが取り込まれています。おそらくちょうどいくつかのGroovyのもの...

2)#1はちょっと変わったものだと思いますが、どうすればよいでしょうか?questionsマップキーセットにStringsの代わりにIntegersが設定されていますか?

class ApplicationCommand implements Validateable { 
    Map<Integer,String[]> questions = new LinkedHashMap<Integer,String[]>(); 
} 

<g:textField name="cmd.questions[14]" value="${cmd.questions[14][0]}" /> 

def save(ApplicationCommand cmd) { 
    System.out.println(cmd.questions.containsKey(14)); //FALSE 
    System.out.println(cmd.questions.containsKey("14")); //TRUE 

    .... 
} 

EDIT:Grailsの3.1

+0

「cmd.questions [14]」ではなく「questions [14]」だけでなく、 btw、バージョンをgrails? – aldrin

+0

@aldrinもし私が 'cmd'を追加しなければ、私のコマンドオブジェクトはまったく投入されません。 Grails 3.1、私はその情報でOPを更新しました。 –

+0

Grails 2.xでは期待通りに動作しますので、3で何かを変更したに違いありません。確かに奇妙で、バグかもしれません。 – aldrin

答えて

0

私はあなたがGrailsParameterMapを使用して明示的のようなメソッドを呼び出す必要があります信じている:私はぶっきらぼうな、より良い方法のわからない

map.getInt(key) 

。このクラスは、同じ名前の複数の値をリストとして解釈する際にも非常に役立ちます。