在本文中,我们向Spring MVC迈出了又一步。 [此外: 术语MVC的创建者提供的pdf 。]从上一篇文章构建,让我们添加将“联系人”添加到应用程序所需的代码。 首先,我们需要添加一些UI组件来启动该过程。 为了简单起见,让它成为一个简单的链接。
文件:/springwebapp001/src/main/webapp/index.jsp
[...]
<a href="contacts/addNew.html"> Add new contact.</a> [...]
如您所见,我们已将此链接指向“ contacts / addNew.html”。 这意味着我们需要某些东西–正在寻找此请求的控制器和/或方法。 让我们创建一个控制器,该控制器将处理所有以“联系人”开头的请求。
文件:src / main / java / org / academy / ui / spring3 / controllers / ContactCtlr.java
package org.academy.ui.spring3.controllers; import org.academy.ui.spring3.forms.ContactFrm;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView; @Controller
@RequestMapping(value = "/contacts")
public class ContactCtlr { private final static Logger logger = LoggerFactory .getLogger(ContactCtlr.class);
[...]
}
Spring还必须知道它必须扫描控制器的特定软件包。
文件:/springwebapp001/src/main/webapp/WEB-INF/spring-servlet.xml
[...]
<context:component-scan base-package="org.academy.ui.spring3.controllers" />
[...]
设置好之后,我们将需要在ContactCtlr中使用一个方法来为/addNew.html字段获取GET请求。 [另外:GET和POST请求有什么区别? 在这里阅读。 ]
文件:src / main / java / org / academy / ui / spring3 / controllers / ContactCtlr.java
[...]
private final String addNewView = "Contacts/AddNew"; @RequestMapping(value = "/addNew", method = RequestMethod.GET)
public String addNewContact() { logger.debug("Display form to add a new contact."); return addNewView;
}
[...]
在这里,我们只是将控件定向到“ Contacts / AddNew”,其简化为/springwebapp001/src/main/webapp/WEB-INF/views/Contacts/AddNew.jsp。
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<html>
<head>
<title>Add New Contact</title>
</head>
<body>
<form:form method="post" commandName="contact" action="addNew.html">
<table>
<tr>
<td colspan="2">Add a new contact.</td>
</tr>
<tr>
<td><form:label path="firstname">First Name</form:label></td>
<td><form:input path="firstname" /></td>
</tr>
<tr>
<td><form:label path="lastname">Last Name</form:label></td>
<td><form:input path="lastname" /></td>
</tr>
<tr>
<td><form:label path="email">Email</form:label></td>
<td><form:input path="email" /></td>
</tr>
<tr>
<td><form:label path="telephone">Telephone</form:label></td>
<td><form:input path="telephone" /></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="Add Contact" /></td>
</tr>
</table>
</form:form>
</body>
</html>
此表单将需要一个Java pojo作为后盾,该pojo将保存jsp中提到的所有表单元素。
文件:/springwebapp001/src/main/java/org/academy/ui/spring3/forms/ContactFrm.java
package org.academy.ui.spring3.forms; public class ContactFrm { private String firstname; private String lastname; private String email; private String telephone; public String getFirstname() { return firstname; } public void setFirstname(String firstname) { this.firstname = firstname; } public String getLastname() { return lastname; } public void setLastname(String lastname) { this.lastname = lastname; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getTelephone() { return telephone; } public void setTelephone(String telephone) { this.telephone = telephone; } }
在AddNew.jsp中,您可以看到该表单期望某人处理对“ addNew.html”的调用。 和以前一样,让我们回到控制器并向“ addNew.html”添加一个处理POST请求的方法。 请注意,这是一个POST请求,而不是我们之前处理过的GET请求。
文件:/springwebapp001/src/main/java/org/academy/ui/spring3/controllers/ContactCtlr.java
[...]
@RequestMapping(value = "/addNew", method = RequestMethod.POST)
public ModelAndView addNewContact( @ModelAttribute("contact") ContactFrm contactFrm, BindingResult result) { logger.debug("Adding a new contact. {}", contactFrm.getFirstname()); // Some code to work on the data received from the user. return new ModelAndView(addNewView, "contact", new ContactFrm());
}
[...]
瞧,如果您在任何servlet容器(例如Tomcat)中编译并运行此应用程序,您将获得一个链接,该链接将导致一个Form,该链接将允许您放入数据,并将该数据传输到位于服务器端,然后返回表格以了解更多信息。 那些在MVC框架应运而生之前设计和开发Web应用程序的听众肯定会湿润的。 即使您使用过早期的MVC框架,Struts(最成功的框架)也将使花在将三个组件(M,V和C)结合在一起上的时间花费,现在我们可以在10分钟内完成。 软件开发肯定已经走了很长一段路。
在下一节中,我们将向该应用程序添加单元测试和日志记录 。 快乐的编码。
相关链接
- Struts –我可以推荐的唯一其他MVC框架
- GET和POST之间的区别
- MVC一词的由来
继续使用Spring 3 MVC处理表单验证
参考:来自Tech for Enterprise博客的JCG合作伙伴 Partho 使用Spring 3 MVC处理表单 。
翻译自: https://www.javacodegeeks.com/2012/08/handling-form-validation-with-spring-3.html