私はSpring MVCの初心者です。これまでにたくさんのチュートリアルを見てきましたが、開発を始めたばかりです。私はちょうどこの問題に遭遇しました:
概要: DB からロードされ、スプリング モデルに裏打ちされた多数のユーザーを含むテーブルを含むフォームがあります。各ユーザーに編集ボタンが必要で、そのユーザーを編集するために別のフォームを表示し、そのユーザーをモデルにバックアップして、ID を開示したり、ユーザーをランダムなキーにマップしたりする必要がないようにしたい.
List<User>
@Service Bean を介してデータベースから取得するオブジェクトがあり、このリストをUserController
Bean に渡します。次に、私のコントローラーで:
@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_n
and#edfrm_e
は、フォーム全体を送り返すのではなく、ここで使用したいシングル ユーザー フォームの ID になることに注意してください。jQuery を使用して、このシングル ユーザー フォームもポップアップし、すべての前、画面の中央に配置します。
これはどのように達成できますか?
PS: これは、編集機能の最適なアプローチではない可能性があります。その場合は、ヒントをいただけると大変助かります。
ありがとう