我是 Spring MVC 的新手——到目前为止,我已经看过很多教程,但刚刚开始开发。我刚刚遇到这个问题:
摘要:我有一个表格,其中包含从数据库加载并支持弹簧模型的大量用户。我想为每个用户设置一个编辑按钮,并且我想调出另一个表单来编辑该用户,并且仍然让该用户在模型中得到支持,这样我就不必透露 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" />
每个用户都有一个编辑按钮。我想要做的是在单击该按钮时出现一个新的单用户表单,并将我的用户对象绑定到它,这样如果我更改名称和电子邮件,我仍然可以在服务器端,以便在数据库中更新它。上面的多用户表单应该禁用所有字段或显示为标签 - 我不想在那里更改内容;我只想在那里显示它们,并使用按钮打开一个弹出窗口或浮动 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:这可能不是编辑功能的最佳方法。在这种情况下,我非常感谢您为我提供了一些提示。
谢谢