這似乎是一個常見問題。我已經完成了所有在SO中給出的答案,但無法使其工作。
我正在嘗試將Spring MVC + Freemarker集成到已有的Web應用程序中。它適用於GET
請求,並且Freemarker模板讀取Controller提供的Java對象時沒有任何問題。
但表單提交無法擊中控制器方法。最後我做了log4j的工作。這裏是我得到的錯誤:
錯誤Spring MVC:Error 400客戶端發送的請求在語法上不正確
HandlerMethod details:
Controller [application.entry.controller.UserController]
Method [public void application.entry.controller.UserController.handleSave(java.lang.String)]
org.springframework.web.bind.MissingServletRequestParameterException:
Required String parameter 'action' is not present
Freemarker的:
<form method="POST" action="save.html">
------------
<input type="submit" class="btnnew" name="saveWithoutValidation" value="Save Without Validation"></input>
<input type="submit" class="btnnew" name="submit" value="Submit"></input>
</form>
上下文根是PORTAL。
爲spring-servlet.xml
<bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="cache" value="true"/>
<property name="prefix" value=""/>
<property name="suffix" value=".ftl"/>
的web.xml
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
控制器
@RequestMapping(value="/save", method=RequestMethod.POST)
public void handleSave(@RequestParam String action){
if(action.equals("submit")){
System.out.println("Damn! You clicked submit");
}
else if(action.equals("saveWithoutValidation")){
System.out.println("Sweet! You want no string attached.");
}
}
因爲我已嘗試添加log4j.logger.org.springframework.web=DEBUG
我現有的log4j的日誌.pr operties但它沒有奏效。
'@ ModelAttribute'會工作,因爲它也結合了請求註解目標。 '@ RequestParam'然而更適合單獨綁定請求參數。 – Bart