Spring 3 の注釈付きコントローラーと送信フォームがあります。JSP には、POST での送信とともに渡す 3 つの非表示フィールドがあります。
<form:form method="POST">
<h2>param1: <c:out value="${command.param1}"/></h2>
<h2>param2: <c:out value="${command.param2}"/></h2>
<h1 style="display: inline">Server time: </h1><h1 style="display: inline" class="serverTime"><c:out value="${command.time}"/></h1>
<form:hidden path="param1"></form:hidden>
<form:hidden path="param2"></form:hidden>
<form:hidden class="serverTime" path="time"></form:hidden>
<input type="submit" value="Next page"/>
</form:form>
そして、これは次のようにこのコントローラーに登録されたメソッドに関連付けられています。
@RequestMapping(method = RequestMethod.POST)
public String processSubmit(
Customer model, BindingResult result, SessionStatus status) {
Calendar calendar = Calendar.getInstance();
model.setTime(calendar.getTime().toString());
return "test/testFinish";
}
顧客には、param1、param2、time の 3 つの文字列フィールドがあります。そして、すべて問題ないようですが、processSubmit() の呼び出し時のモデルには、2/3 フィールドの 2 倍のデータがあります。
param1: value1,value1
param2: value2,value2
time: Wed Oct 23 12:57:38 PDT 2013
そのため、時間は問題ありませんが、param1 と 2 が 2 倍になっています。
どうしてこれなの?
@RequestMapping(method = RequestMethod.GET)
public String initForm(HttpServletRequest request, ModelMap model) {
ChrisTestFinish chrisTestFinish = new ChrisTestFinish();
chrisTestFinish.setParam1(request.getParameter("param1"));
chrisTestFinish.setParam2(request.getParameter("param2"));
Calendar calendar = Calendar.getInstance();
chrisTestFinish.setTime(calendar.getTime().toString());
model.addAttribute("command", chrisTestFinish);
return getViewName();
}
これは、上記の JSP をセットアップするビューをレンダリングするコントローラーです。
では、form:form タグから生成されたアクションを見てみました。
action="/chris/test1.htm?param1=value1&param2=value4"
そして、何らかの理由で、モデルが value1、value4 の 2 つのコピーで構築されていることに気付きました。
私は2つの隠された入力を取り除き、物事はうまくいきましたが、何が起こっているのか本当の根本的な原因はわかりません。誰かが説明したい場合は感謝します