在本文中,我們向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