ここでは3.1.1を使用しています。
これは正常に機能し、フォームは正しく表示されます
@RequestMapping(value={"/universities"}, params="new", method=RequestMethod.GET)
public String addUniversity(Model model) {
model.addAttribute("addForm", AddForm.newUniversity());
return "page/add-university";
}
検証エラーをテストすると(フィールドを空にすることで)、500の内部サーバーエラーが発生し、スタックトレースがメインメッセージとともに表示されます: BindingResultもBean名'addForm'のプレーンターゲットオブジェクトもリクエスト属性として使用できません
これは方法です:
@RequestMapping(value={"/universities"}, method=RequestMethod.POST)
public String submitNewUniversity(@Valid AddForm form, BindingResult binding) {
if (binding.hasErrors()) {
return "page/add-university";
}
// do others here ...
}
これが私のJSPです:
<%@ taglib prefix="s" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="t" uri="http://tiles.apache.org/tags-tiles" %>
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c" %>
<%@ taglib prefix="sf" uri="http://www.springframework.org/tags/form"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"
session="false" %>
<s:url var="action" value="/universities" />
<sf:form method="POST" modelAttribute="addForm" action="${action}">
<fieldset>
<table cellspacing="0">
<tr>
<th><sf:label path="name">University:</sf:label></th>
<td><sf:input path="name" size="30" /> <br/>
<sf:errors path="name" cssClass="error" />
</td>
</tr>
.....
</sf:form>
これまで私が研究したのはこれらです:
- コントローラとJSPタイルの両方で、Bean名は正しいです。これは「addForm」です。
- フォームの表示は正常に機能するため、ビューが存在します。
- フォームの表示は正常に機能するため、JSPのフィールド名も正しいです。
- パラメータの順序は問題ありません。BindingResultはコマンドBeanに従います。
- 私が追加したログの出力によってsubmitNewUniversityが呼び出されると確信しています
私はここで何を間違えたのだろうか?