我是Spring MVC的新手 - 迄今爲止我已經看過大量的教程,但剛開始開發。我剛碰到這個問題:Spring MVC如何在編輯對象時處理綁定
摘要:我有一個表格,其中包含大量用戶從數據庫加載並在春季模型中備份的表格。我想爲每個用戶編輯一個編輯按鈕,並且我想調出另一個表單以編輯該用戶,並且仍然讓該用戶在模型中備份,因此我不必泄露編號或將用戶映射到隨機密鑰。
我有一個List<User>
對象,我從數據庫通過@Service豆retrive,然後我通過這個名單我UserController
豆。然後,在我的控制器:
@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" />
爲每個用戶。我想要做的是在單擊該按鈕時出現一個新的單用戶表單,並將我的用戶對象綁定到該表單上,這樣,如果更改名稱和電子郵件地址,我仍然可以在服務器端爲了在數據庫中更新它。上面的多用戶表單應該禁用所有字段或顯示爲標籤 - 我不想在那裏更改;我只想在那裏顯示它們,並有按鈕打開彈出式窗口或浮動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
而#edfrm_e
將是我想在此使用的單用戶表單的ID,而不是發回整個表單。使用jQuery我也會彈出這個單用戶表單,並將它放置在屏幕中間的所有內容之前。
這是如何實現的?
P.S .:這可能不是編輯功能的最佳方法。在這種情況下,我真的很感激你給我提供了一些提示。
感謝
如果你不告訴它,Spring如何知道你正在編輯的用戶?你必須至少發送一些**信息。 – zeroflagL 2013-07-03 16:46:48