7

私は Grails 初心者で、バグと思われる何かに遭遇しましたが、すべてを正しく構成していない可能性は十分にあります。

2 つの単純なドメイン クラスがあります。

   class Player {

        String firstName
        String lastName

        static constraints = {
            firstName(blank:false)
            lastName(blank:false)
        }
        String toString() { lastName + ", " + firstName }
    }

class Team {

    String mascot;
    static hasMany = [players:Player]

    static constraints = {
        mascot(blank:false)
    }
}

これら 2 つのドメイン クラスの動的な足場を超えて何もしない、両方のコントローラーがあります。

しかし、DB にプレイヤーのリストがある場合でも、新しいチームを作成するときにそれらの複数選択ボックスが表示されません。

ただし、チームを編集しようとすると複数選択が表示されます

これは新しいアイテムの動的な足場のバグですか、これがどのように機能するのか誤解していますか、それともここで宣言する必要があるものは他にありますか?

どんな助けでも大歓迎です!私が新人であるために、StackOverflow で追加できないスクリーンショットがありますが、それが役立つ場合は、別の方法でそれらを表示できれば幸いです。

4

3 に答える 3

2

私はついにこれを理解し、他の誰かがそれに遭遇した場合に備えて、私がしたことを伝えたいと思いました.

チームのビューを生成すると、edit.gsp のフォーム ブロックは次のようになります。

    <input type="hidden" name="id" value="${teamInstance?.id}" />
                <input type="hidden" name="version" value="${teamInstance?.version}" />
                <div class="dialog">
                    <table>
                        <tbody>

                            <tr class="prop">
                                <td valign="top" class="name">
                                    <label for="mascot">Mascot:</label>
                                </td>
                                <td valign="top" class="value ${hasErrors(bean:teamInstance,field:'mascot','errors')}">
                                    <input type="text" id="mascot" name="mascot" value="${fieldValue(bean:teamInstance,field:'mascot')}"/>
                                </td>
                            </tr> 

                            <tr class="prop">
                                <td valign="top" class="name">
                                    <label for="players">Players:</label>
                                </td>
                                <td valign="top" class="value ${hasErrors(bean:teamInstance,field:'players','errors')}">
                                    <g:select name="players"
from="${Player.list()}"
size="5" multiple="yes" optionKey="id"
value="${teamInstance?.players}" />

                                </td>
                            </tr> 

                        </tbody>
                    </table>
                </div>
                <div class="buttons">
                    <span class="button"><g:actionSubmit class="save" value="Update" /></span>
                    <span class="button"><g:actionSubmit class="delete" onclick="return confirm('Are you sure?');" value="Delete" /></span>
                </div>
            </g:form>

ただし、create.gsp のフォーム ブロックは次のようになります。

<g:form action="save" method="post" >
                <div class="dialog">
                    <table>
                        <tbody>

                            <tr class="prop">
                                <td valign="top" class="name">
                                    <label for="mascot">Mascot:</label>
                                </td>
                                <td valign="top" class="value ${hasErrors(bean:teamInstance,field:'mascot','errors')}">
                                    <input type="text" id="mascot" name="mascot" value="${fieldValue(bean:teamInstance,field:'mascot')}"/>
                                </td>
                            </tr> 

                        </tbody>
                    </table>
                </div>
                <div class="buttons">
                    <span class="button"><input class="save" type="submit" value="Create" /></span>
                </div>
        </g:form>

つまり、このようなまれなケースでは、デフォルトの作成ビューではウィジェットが省略され、複数選択リストが適切に表示されます。欠落しているコードをコピーして貼り付けたところ、動的にスキャフォールディングされたコントローラーがそれを取得し、期待どおりに保持しました。したがって、これは間違いなくビュー生成コードのバグです。

于 2009-05-06T22:30:45.317 に答える
1

Grailsの現在のバージョン(v1.3.4)を使用して同じ問題が発生しました。create.gspを手動で変更する必要がありました

于 2010-09-28T02:13:29.427 に答える