1

私はSpring MVCの初心者です。これまでにたくさんのチュートリアルを見てきましたが、開発を始めたばかりです。私はちょうどこの問題に遭遇しました:

概要: DB からロードされ、スプリング モデルに裏打ちされた多数のユーザーを含むテーブルを含むフォームがあります。各ユーザーに編集ボタンが必要で、そのユーザーを編集するために別のフォームを表示し、そのユーザーをモデルにバックアップして、ID を開示したり、ユーザーをランダムなキーにマップしたりする必要がないようにしたい.

List<User>@Service Bean を介してデータベースから取得するオブジェクトがあり、このリストをUserControllerBean に渡します。次に、私のコントローラーで:

@RequestMapping(value="/users", method = RequestMethod.GET)
public ModelAndView showUsers() {       
    List<User> users = userService.getUserList(); //Get from DB. Returns some users.
    UserSet uset = new UserSet(); //Custom object backing the list.
    uset.setUserList(users);

    return new ModelAndView("users", "userset", uset);
}

これにより、ビューが返さusers.jspれ、フォームを使用してテーブルにユーザー リストが表示されます。

<form:form action="#" method="post" modelAttribute="userset">
    <table>
        <tr>
            <th>N.</th>
            <th>Name</th>
            <th>Email</th>
        </tr>
        <c:forEach var="user" items="${userset.userList}"
            varStatus="status">
            <tr>
                <td align="center">${status.count}</td>
                <td><input name="userList[${status.index}].name"
                    value="${user.name}" id="name_${status.index}" /></td>
                <td><input name="userList[${status.index}].email"
                    value="${user.email}" id="email_${status.index}" /></td>
                <td><input type="button" value="Ed." id="edbtn${status.index}"
                    class="edbtn" /></td>
            </tr>
        </c:forEach>
    </table>
    <input type="submit" value="Save" />
</form:form>

<input type="button" value="Ed." id="edbtn${status.index}" class="edbtn" />これで、ユーザーごとに編集ボタンがあることがわかります。私がしたいのは、そのボタンをクリックしたときに新しいシングル ユーザー フォームを表示し、それに User オブジェクトをバインドして、名前と電子メールを変更しても ID を取得できるようにすることです。データベースで更新するためにサーバー側。上記のマルチユーザー フォームでは、すべてのフィールドを無効にするか、ラベルとして表示する必要があります。ここでは変更したくありません。そこにそれらを表示し、実際のシングルユーザーフォームを内部に含むポップアップまたはフローティング div を開くボタンを用意したいだけです。

ちなみに、次のコントローラーで編集したユーザーをキャプチャしようとしています:

@RequestMapping(value="users/edit", method = RequestMethod.POST)
public String edit(@ModelAttribute(value="user") User user, BindingResult bresult) {
    /* Do something here with the user */
    /* Currently the ID returned from user.getId() is null, but the original user shown in the form has an ID != null */
    return "redirect:/users";
}

そして、jQuery を介して編集リクエストを送信しています。

jq("#edituserbtn").click(function() {
        jq.post("users/edit", {
            name : jq("#edfrm_n").val(),
            email : jq("#edfrm_e").val(),
        }, function(data, status) {
            //jq("#changing").text(data + "; " + status);
        });
    });

#edfrm_nand#edfrm_eは、フォーム全体を送り返すのではなく、ここで使用したいシングル ユーザー フォームの ID になることに注意してください。jQuery を使用して、このシングル ユーザー フォームもポップアップし、すべての前、画面の中央に配置します。

これはどのように達成できますか?

PS: これは、編集機能の最適なアプローチではない可能性があります。その場合は、ヒントをいただけると大変助かります。

ありがとう

4

2 に答える 2

1

既存のコードについては、いくつか変更を加える必要があると思います。ユーザーIDをユーザー編集ボタンの値として設定する必要があります。引数がユーザーID、ユーザー名、ステータスであるjs関数を記述できます。ボタンにバインドします。編集ボタンをクリックすると、js関数が実行され、このダイアログに3つの引数を取得して表示できる新しいダイアログがポップアップ表示されます。ダイアログjQueryライブラリを追加したので、jQueryダイアログを使用することをお勧めします。そして、このダイアログに保存ボタンを追加する必要があります。ユーザーデータを編集した後、保存ボタンをクリックし、ajaxを呼び出してデータをサーバーに送信します。これはIDが含まれているため、どちらが更新されるかがわかります。サーバーは更新操作のステータスを返します。ajaxコールバック関数では、ステータスを使用して他のことを行います。成功した場合はダイアログを閉じ、失敗した場合はメインウィンドウを更新します。

于 2013-03-20T11:53:39.910 に答える
0

そうですね、Spring は魔法をやっていると思っていましたが、今はそうではないと思います。zeroflagl が言ったように、Spring は更新しようとしているものを知る必要があるため、何らかの ID または実際の DB ID を提供する必要があります。

于 2014-04-16T23:23:37.827 に答える