0

少し背景を説明させてください。

ユーザーに関するデータを保存するドメイン モデルがあります。1 人のユーザーが複数の電話番号を持つことができるように、ユーザーの電話番号用に別のドメイン モデルがあります。

システムに保存されているユーザーのデータがあり、そのユーザーの2つの電話番号を言います。次に、ページに、コントローラーでアクションを呼び出し、そのユーザーの電話番号データをビューに戻してレンダリングするように設計された選択リストがあります。

各要素のコードは次のとおりです。

コントローラ機能:

def getNumbers = {

        def user = User.get(params.phoneId.toInteger())

        [phones: user.phones]
    }

景色:

<g:select id="users" name="user_field" from="${Users}" 
                optionKey="id" 
                optionValue="name" 
                noSelection="['':'-Choose a Name-']"
                onchange="${remoteFunction(action: 'getNumbers',
                                 update: [success: 'great', failure: 'ohno'],
                                 params: [userId: this.value ],
                                 options: '[asynchronous: false]')}" />


<g:each in="${phones?}" var="a" status="i">
                <div>

                 <g:textField name="number" required="" value="${phones?.data}"/>

                </div>
            </g:each>

このコードを実行すると、Action getNumbers が呼び出されますが、何らかの理由で次のエラー メッセージが表示されます。

| Error 2013-07-03 14:25:37,700 [http-bio-8080-exec-1] ERROR errors.GrailsExceptionResolver  - NumberFormatException occurred when processing request: [POST] /app/user/getNumbers - parameters:
userId: null
For input string: "null". Stacktrace follows:
User: For input string: "null"

このリストのデータを以下の JavaScript を介してページのテキスト ボックスにも表示し、値が null ではなく、正しく表示されるため、渡されたパラメータが null になるのは奇妙です。

document.getElementById("verification").innerHTML = "<br />" + this.value;

誰かがこの問題を修正するのを手伝ってくれたり、私が望むものを達成する別の方法を教えてくれることを願っています.

前もって感謝します。

4

1 に答える 1

1

この手順を試してください:

1 - テンプレートを作成します: _phones.gsp

<g:each in="${phones?}" var="a" status="i">
   <option value="${phones?.data}">${phones?.data}</option>
</g:each>

2 - 最初の選択で:

<g:select id="users" name="user_field" from="${Users}" 
            optionKey="id" 
            optionValue="name" 
            noSelection="['':'-Choose a Name-']"
            onchange="${remoteFunction(action: 'getNumbers',
                             update: [success: 'great', failure: 'ohno'],
                             params: '\'userId=\'+this.value',
                             options: '[asynchronous: false]')}" />

3 - 2番目の選択でこれを入れてください:

<select id="great">
</select>

4 - あなたのコントローラーで: def getNumbers = {

    // You get the phones by User.id, i thik so :-) 'users' is a first select and contains the id selected, and provide the find in phones.
    def user = User.get(params.users.toInteger())

    [phones: user.phones]
}

私の悪い英語で申し訳ありません;-)

于 2013-07-03T20:04:13.383 に答える