私はspringMVCが初めてで、理解できないこの問題に遭遇しました。データベースから取得したいくつかの値を使用して、いくつかのフィールドが get メソッドで事前に入力されるフォームを持つ JSP があります。POST メソッドを使用してフォームを送信し、必要なフィールドが入力されていない場合、GET メソッドを呼び出してフォームを再度表示し、ページの上部にエラー メッセージを表示します。すべてがうまく機能し、事前入力が必要なフィールドに正しく入力されます。
テストで遭遇した問題は、事前入力されたフィールドを削除して再度送信すると、POST メソッドが GET メソッドを呼び出してページをエラー メッセージとともに再表示し、エラー メッセージが画面に正常に表示されることです。データベースを呼び出して、毎回 GET メソッドで model.put() メソッドを使用してフォームにデータを入力しているにもかかわらず、一部の値が事前に入力されていません。
エラーがある場合、Spring は JSP のフィールドにデータを入力しないようです。そうですか?
これは私のコントローラーの単純化されたバージョンですが、私がやろうとしていることを説明します:
@RequestMapping(value = myPageURL, method = GET)
public String displayPage(@ModelAttribute("someForm") SomeForm someForm,
BindingResult bindingResult,
ModelMap model) {
//call the database and get some values
someform.setSomefield1("someValue1");
someform.setSomefield2("someValue2");
model.put("someform", someForm)
return VIEW;
}
@RequestMapping(value = myPageURL, method = POST)
public String submitform(@ModelAttribute("someForm") SomeForm someForm,
BindingResult bindingResult,
ModelMap model) {
validate(someForm, bindingResult);
if (!bindingResult.hasErrors()) {
//Display some page
}
return displayPage(someForm, bindingResult, model);
}
これは JSP のセクションです。
<form:form action=myPageURL method="POST" modelAttribute="someForm">
<form:hidden path="cid"/>
<td>
<form:input path="someField1" size="10" maxlength="20" cssErrorClass="fieldError
error-text-first-name-label"/>
</td>
<td>
<form:input path="someField2" size="10" maxlength="20" cssErrorClass="fieldError
error-text-last-name-label"/>
</td>
<td>
<form:input path="someField3" size="10" maxlength="20" cssErrorClass="fieldError
error-text-last-name-label"/>
</td>
</form:form>
ありがとう