2

<g:select>のGSPの1つに次のようなものがあります。

<g:select id="location" name="criteria.location" from="${example.Location.list()}" optionKey="id" required="" value="1" class="many-to-one"/>

期待される結果はこんな感じですね。

期待される結果:

<select id="location" name="criteria.location" required="" class="many-to-one" >
    <option value="1" selected="selected" >1st Location Name</option>
    <option value="2" >2nd Location Name</option>
    <option value="3" >3rd Location Name</option>
    <!-- entries omitted -->
    <option value="49" >49th Location Name</option>
    <option value="50" >50th Location Name</option>
</select>

しかし、私は何を得るのですか?選択したアイテムが2つになります。49番目のオプションも選択されますが、その理由は想像できません。私のコードには値「49」についての言及はまったくありません...

実結果:

<select id="location" name="criteria.location" required="" class="many-to-one" >
    <option value="1" selected="selected" >1st Location Name</option>
    <option value="2" >2nd Location Name</option>
    <option value="3" >3rd Location Name</option>
    <!-- entries omitted -->
    <option value="49" selected="selected" >49th Location Name</option>
    <option value="50" >50th Location Name</option>
</select>

valueたとえば、 inを「3」に変更すると<g:select>、3番目のオプションが選択されますが、何らかの理由で49番目のアイテムも選択されます。

編集:さらに奇妙なことに、valueプロパティを49より大きい値に変更すると、選択が機能し、n番目のオプションのみが選択されます!

更新:<g:select>どのように機能するかを詳しく説明した回答を投稿しましたが、タグの元の動作がまだわかりません。

誰かがここで何が起こっているのかについて何か考えがありますか?


Grailsバージョン: 2.2.0

4

3 に答える 3

4

少し遅れていることはわかっていますが、今日この問題が発生しました。まず第一に、それは実際にはバグだと思います。報告されているかどうかはわかりませんが、データ型に関係している可能性があります。
あなたのアプローチはうまく機能しますが、動的に値を選択する必要がない場合に限ります。そのためには、次のように、バインドされた値を整数(Long、または探しているタイプ)としてキャストします。

<g:select id="location" name="criteria.location" from="${example.Location.list()}" optionKey="id" required="" value="${yourVarName as Integer}" class="many-to-one"/>

fieldValueの後にも使用できます。それが誰かを助け、なぜこれが起こっているのかについてのあなたの質問に答えることができることを願っています。しかし、確かに、それはバグとして報告されるべきです。

于 2014-06-26T15:01:49.373 に答える
2

<g:select>それを機能させる方法を理解しましたが、それでもタグの動作を説明することはできません。value次のように、プロパティを「1」ではなく「${1}」に変更しました。

<g:select id="location" name="criteria.location" from="${example.Location.list()}" optionKey="id" required="" value="${1}" class="many-to-one"/>

タグが値を数値ではなく文字列として解釈していたと思いますが、タグによって、複数選択ではない選択コントロールがデフォルトで複数の選択されたアイテムを持つ<g:select>ことができる方法がわかりません。私には、これはバグのように見えます。

于 2013-03-21T09:38:35.053 に答える
1

値属性を使用する

value="${location ?: 49}"  

例えば

<g:select id="location" name="criteria.location" from="${example.Location.list()}" optionKey="id" required="" value="${location ?: 49}" class="many-to-one"/>
于 2013-03-21T09:38:00.297 に答える