java - @ModelAttribute在Spring框架中如何工作?

标签 java spring-mvc model

我正在学习Spring框架,我认为当我们在 Controller 中使用@ModelAttribute时,我们也需要在jsp中指定这个ModelAttribute。这是一个例子:

Controller :

@PostMapping("/processRegistrationForm")
public String processRegistrationForm(
        @Valid @ModelAttribute("crmUser") CrmUser theCrmUser, 
        BindingResult theBindingResult, 
        Model theModel) {

            ...
     }

jsp:

                <!-- Registration Form -->
                <form:form action="${pageContext.request.contextPath}/register/processRegistrationForm" 
                           modelAttribute="crmUser"
                           class="form-horizontal">

                    <!-- User name -->
                    <div style="margin-bottom: 25px" class="input-group">
                        <span class="input-group-addon"><i class="glyphicon glyphicon-user"></i></span> 
                        <form:errors path="userName" cssClass="error" />
                        <form:input path="userName" placeholder="username (*)" class="form-control" />
                    </div>

                    ...........

                </form:form>

因此,我们在 jsp modelAttribute="crmUser" 中指定了 modelAttribute。

但是这里是使用@ModelAttribute的另一个例子,并且jsp中没有关于这个modelAttribute的规范。而且效果非常好。

Controller :

@PostMapping("/registerUser")
public String register(@ModelAttribute("user") User user) {
    userRepository.save(user);
    return "login/login";

}

jsp:

<form action="registerUser" method="post">
    <pre>
        First Name: <input type="text" name="firstName"/>
        Last Name:  <input type="text" name="lastName"/>
        User Name: <input type="text" name="email"/>
        Password: <input type="password" name="password"/>
        Confirm Password: <input type="password" name="confirmPassword"/>
        <input type="submit" value="register"/>
    </pre>
</form>

所以在这种情况下我们不在jsp中指定modelAttribute。我不明白Spring如何知道谁是模型。 user 是 modelAttribute 的默认名称吗?只有当我们使用其他名称时,我们才在 jsp 中指定 modelAttribute 吗?任何反馈将不胜感激。谢谢!

最佳答案

您实际上可以在表单中指定它

@PostMapping("/registerUser")
public String register(@ModelAttribute("user") User user) {
    userRepository.save(user);
    return "login/login";

}

使用 spring 表单标签

<form:form method="POST" action="/registerUser"
  modelAttribute="user">...

如果您不指定 Spring 可能会在您的背后执行此操作,如下所述:https://www.baeldung.com/spring-mvc-and-the-modelattribute-annotation

...并且您不需要指定它,因为与其余端点一样,在此资源映射中,您只能有一个主体,在本例中是您的表单对象。

关于java - @ModelAttribute在Spring框架中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57296216/

相关文章:

java - DFS Java 实现 : how to write "Element in deque/stack"

JavaFX 在 FXML 中定义内部类

java - 寻找不需要任何安装的良好且简单的数据库替代方案

java - 如何在jsp页面上以单独的日期和时间显示本地日期时间?

python - 循环 View 中的模型对象字段

view - Aurelia - 直通路线

java - Portlet、HttpSession 和线程安全

java - 无法使用具有构建器模式的 jackson 3+ 实例化 POJO

java - 在 Spring MVC Controller 中反序列化 json 数组

python - 删除()一个实例