使用绑定仅替换选定的字段

时间:2015-06-28 20:37:19

标签: spring spring-mvc

我正在Spring MVC中构建简单的twitter克隆。我想为发布的消息提供编辑功能。

消息域对象看起来像这样(简化)

public class Message {
    long id;
    String text;
    Date date;
    User user;
}

我创建了jps表单

    <form:form action="edit" method="post" modelAttribute="message">
        <table>
            <tr>
                <td><label for="text">Message: </label></td>
                <td><form:textarea path="text" id="text"/></td>
            </tr>
            <tr>
                <td><input type="submit" name="commit" value="Save" /></td>
            </tr>
        </table>
    </form:form>

并在控制器类中添加了这些方法

@RequestMapping(value = "/edit", method = RequestMethod.GET)
    public String showEditMessage(@RequestParam long id, Model model) {
        Message message = messageService.findMessage(id);
        if (message == null) {
            return "404";
        }
        model.addAttribute("message", message);
        return "users/editMessage";

    }

    @RequestMapping(value = "/edit", method = RequestMethod.POST)
    public String editMessage(@Valid @ModelAttribute Message message, BindingResult bindingResult) {
        if (bindingResult.hasErrors()) {
            return "/users/editMessage";
        }

        messageService.updateMessage(message);
        return "/users/editMessage";
    }

问题是editMessage()中收到的消息只包含文本字段。我认为这是预期的行为。是否可以配置为替换仅以jsp格式的字段?

我知道这只是一个字段而且我可以使用@RequestParam字符串消息,但迟早我会遇到类似的问题而不仅仅是一个字段。

我也有问题。 showEditMessage()中添加的属性是否传递给editMessage()方法?我尝试在第一个方法中添加“id”属性,但我无法在第二个方法中使用“@RequestParam long id”来检索它。

1 个答案:

答案 0 :(得分:0)

@SessionAttributes("message")

在控制器类之上解决了它。