java - 是否可以在 Spring 中提交包含现有实体的表单?如果是,怎么办?

标签 java spring form-submit

这是jsp:

<c:if test="${!empty USERS}">
    <form:form method="post" action="requestForFriends.html" commandName="user">
        <form:select path="userName">
            <c:forEach items="${USERS}" var="user">
                <form:option value="${user.userName}"></form:option>
            </c:forEach>
        </form:select>

        <input type="submit" value="Send freindship request" />
    </form:form>
</c:if>

这是 Controller 的相关部分:

@RequestMapping("/toAddFriend")
public ModelAndView toAddNewFriend() {
    Map<String, Object> model = new HashMap<String, Object>();
    model.put("USERS", userService.getUsers());
    ModelAndView ret=new ModelAndView("addFriend", model);
    ret.addObject("user", new User());

    return ret;
}

如果我执行上面的代码,那么当我提交表单时将创建一个全新的 User 对象。但是,当我单击“提交”时我想获取已存在的用户实例之一,这些实例清楚地存在于此处:

<c:forEach items="${USERS}" var="user">
    <form:option value="${user.userName}"></form:option>

如何修改代码来获取现有对象?
实际上我知道一种获取现有实例的丑陋方法。通过提交表单,我可以创建一个新的 User 实例,其用户名与我正在查找的用户名相同。然后,在 DaoImpl 类中,我可以查询与新创建的用户共享用户名的“旧”用户。但我认为这是相当浪费和丑陋的,所以我不敢相信没有更好的方法。

更新

   <!-- language: lang-java -->

 @RequestMapping(value = "/requestForFriends", method = RequestMethod.POST)
        public ModelAndView requestNewFriend(@ModelAttribute("user") User user, BindingResult result) {
            System.out.println(user.getUserName());
                System.out.println(user.getEmail());
                Map<String, Object> model = new HashMap<String, Object>();
                model.put("USERS", userService.getUsers());
                ModelAndView ret=new ModelAndView("addFriend", model);
                ret.addObject("user", new User());

                return ret;

            }

最佳答案

  @ModelAttribute
    public void fillUsers(Model model) {
        model.addAttribute("USERS", userService.getUsers());
    }

    @ModelAttribute
    public void getUser(@RequestParam(required = false) String userName, Model model) {
        User user = null;
        if (userName != null) {
            user = userService.getUserByName(userName);
        }
        if (user == null) {
            user = new User();
        }
        model.addAttribute("user", user);
    }

    @RequestMapping("/toAddFriend")
    public String toAddNewFriend() {
        return "addFriend";

    }

    @RequestMapping(value = "/requestForFriends", method = RequestMethod.POST)
    public String requestNewFriend(@ModelAttribute("user") User user) {
        System.out.println(user.getUserName());
        System.out.println(user.getEmail());
        return "addFriend";

    }

关于java - 是否可以在 Spring 中提交包含现有实体的表单?如果是,怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12036603/

相关文章:

jquery - 如何检测用户是否取消选中复选框?

javascript - 如何调用 REST api 并获取响应并将其显示在 HTML 页面中

java - Java中如何从字符串中提取url?

java - 如果使用@NotNull,双向一对一关系将无法保存

php - 页面刷新时如何防止表单重新提交(F5/CTRL+R)

php - 如何在Bootstrap中将双按钮设置为 "fire"

java - Android:XML Textview 文本属性

java - 单独的集合类对象

java - MessageSourceAware 是特殊情况吗?或者我可以以类似的方式注入(inject)其他依赖项吗?

java - Spring BeanCreationException