1

我是 Spring MVC 的新手——到目前为止,我已经看过很多教程,但刚刚开始开发。我刚刚遇到这个问题:

摘要:我有一个表格,其中包含从数据库加载并支持弹簧模型的大量用户。我想为每个用户设置一个编辑按钮,并且我想调出另一个表单来编辑该用户,并且仍然让该用户在模型中得到支持,这样我就不必透露 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" />每个用户都有一个编辑按钮。我想要做的是在单击该按钮时出现一个新的单用户表单,并将我的用户对象绑定到它,这样如果我更改名称和电子邮件,我仍然可以在服务器端,以便在数据库中更新它。上面的多用户表单应该禁用所有字段或显示为标签 - 我不想在那里更改内容;我只想在那里显示它们,并使用按钮打开一个弹出窗口或浮动 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设置为用户编辑按钮值,您可以编写一个js函数,其参数是用户ID,用户名和状态。将其绑定到按钮。当您单击编辑按钮时,它将运行 js 函数并在此对话框中弹出一个新对话框,您可以获取三个参数并显示它们。我推荐你使用 jQuery 对话框,因为你已经添加了 jQuery 库。您应该在此对话框中添加保存按钮,编辑用户数据后,只需单击保存按钮并调用 ajax 将数据发送到服务器,因为它有 id,所以您知道哪个将被更新。并且服务器会返回更新操作的状态,在ajax回调函数中,你用状态做另一件事。如果成功,关闭对话框并刷新主窗口,如果失败,

于 2013-03-20T11:53:39.910 回答
0

Well, I thought Spring was doing some magic I now think it is not doing. As zeroflagl said, Spring needs to know what you are trying to update, so some sort of ID, or the actual DB ID, must be provided.

于 2014-04-16T23:23:37.827 回答