Я как бы новичок в Spring MVC - до сих пор видел множество руководств, но только начал разработку. Я только что столкнулся с этой проблемой:
РЕЗЮМЕ: у меня есть форма с таблицей, содержащей множество пользователей, загруженных из БД и поддерживаемых в модели Spring. Я хочу иметь кнопку редактирования для каждого пользователя, и я хочу вызвать другую форму, чтобы отредактировать этого пользователя, и при этом, чтобы этот пользователь поддерживался в модели, поэтому мне не нужно раскрывать идентификаторы или сопоставлять пользователей со случайными ключами .
У меня есть объект List<User>
, который я извлекаю из базы данных с помощью bean-компонента @Service, а затем передаю этот список своему 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, чтобы, если я изменю имя и адрес электронной почты, я все равно смогу получить идентификатор на на стороне сервера, чтобы обновить его в базе данных. В приведенной выше многопользовательской форме все поля должны быть отключены или отображаться как ярлыки - я не хочу ничего менять; Я просто хочу показать их там и иметь кнопку для открытия всплывающего или плавающего 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
будут идентификаторами той однопользовательской формы, которую я хочу использовать здесь, вместо того, чтобы отправлять обратно всю форму. Используя jQuery, я бы также открыл эту однопользовательскую форму и поместил ее поверх всего в середине экрана.
Как этого добиться?
P.S .: Возможно, это не лучший подход для функции редактирования. В таком случае я был бы очень признателен, если вы дали мне несколько советов.
Спасибо