これはよくある問題のようです。私はSOで与えられたすべての答えを出しましたが、それを機能させることができませんでした.
Spring MVC+Freemarker を既存の Web アプリケーションに統合しようとしています。リクエストに対しては正常に機能しGET
、Freemarker テンプレートはコントローラーによって提供された Java オブジェクトを問題なく読み取ります。
ただし、フォームの送信は Controller メソッドにヒットできません。最後に、log4j を機能させました。ここに私が得ているエラーがあります:
エラー
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
フリーマーカー:
<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>
context-root は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.properties に追加しようとしましたが、うまくいきませんでした。