2016-10-14 49 views
1

是否可以使用Spring批註@ModelAttribute來處理表單而不使用Spring標籤<form:form...>。我看到這個way to do,但使用Thymeleaf似乎很複雜(我對此一無所知)。使用Spring MVC處理表單而不使用Spring <form:form>標記?

Spring應該是一個非侵入式的框架,所以有一個替代解決方案來解決我的問題嗎?

+0

你用什麼來代替Thymeleaf? – 11thdimension

+1

沒有別的,只需使用帶有JSTL和EL的簡單JSP頁面即可。 – akuma8

回答

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> 

在控制器添加的數據傳輸對象(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類)和模型中的命名完全相同即可。

+0

因此,我們完全可以忽略Spring標記,並僅使用「id」屬性的值(這裏是「newUser」)將表單與控制器端的POJO綁定!我是對的? – akuma8

+0

是的,你說得對。它是如何工作的。許多輸入屬性在基本HTML中編寫起來更加簡單和簡短,如required =「required」=> required等。在更復雜的形式(如select - option)中,spring標籤版本更加緊湊​​。 – micaro

+0

在HTML版本中,所有的基本輸入屬性(id,name,type,value)必須在那裏。你可能沒有留下任何東西。否則它不會總是工作。 – micaro

0

按照上面註釋部分的建議使用JSp。 首先必須將以下depency添加到您的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 
+0

我想你不明白我的問題。我想用Spring控制器處理一個表單,而不使用我的JSP文件中的spring標記。 Spring使用註解@ModelAttribute似乎非常靈活,但我不想在我的JSP文件中使用類似的東西。 – akuma8

+0

你是否嘗試使用沒有春天形式標籤的百里香?不起訴它會工作。這就是爲什麼我們建議jsp與jstl和EL結合使用。 –

+0

順便說一下@ModelAttribute和jsp的運行良好,沒有彈簧形式標籤 –