使用Spring MVC处理表单而不使用Spring <form:form>标签?

时间:2016-10-14 15:49:21

标签: java spring forms spring-mvc

是否可以使用Spring注释@ModelAttribute处理表单而不使用Spring标记<form:form...>。我看到了way to do,但使用Thymeleaf似乎很复杂(我对此一无所知)。

Spring应该是一个非侵入式框架,那么我的问题有另一种解决方案吗?

2 个答案:

答案 0 :(得分:4)

如果使用Spring标记构建表单,它将转换为HTML。运行项目并检查JSP站点的源代码。 Spring标签只会让编码器更容易一些。例如

<form:form modelAttribute="newUser" action="/addUser" method="post">
   <form:input path="firstName" />
   <form:input path="lastName" />
   <button type="submit">Add</button>
</form:form>

将转换为HTML

<form id="newUser" action="/addUser" method="post">
   <input id="firstName" name="firstName" type="text" value="" />
   <input id="lastName" name="lastName" type="text" value="" />
   <button type="submit">Add</button>
</form>

在Controller中,您可以向Model添加数据传输对象(DTO),例如

@RequestMapping(value = "/index", method = RequestMethod.GET)
public ModelAndView homePage() {
   ModelAndView model = new ModelAndView();
   model.addObject("newUser", new User());
   model.setViewName("index");
   return model;
}

并收到表单数据

@RequestMapping(value = "/addUser", method = RequestMethod.POST)
public ModelAndView addUser(
        @ModelAttribute("newUser") User user) { ... }

使用Spring标签是完全可选的,只要表单字段的命名与bean对象(此处为User类)和模型完全相同。

答案 1 :(得分:0)

按照上面评论部分的建议使用JSp。 首先,您必须将以下依赖项添加到您的pom(或其等效的gradle)

<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.4</version>
<scope>provided</scope>
</dependency>

此外,您的jsp应该放在您的web-inf文件夹中。 您的application.properties应如下所示:

spring.mvc.view.prefix: /WEB-INF/jsp/
spring.mvc.view.suffix: .jsp