我有一个 Spring 3 带注释的控制器和一个带有提交的表单。JSP 有 3 个隐藏字段,我们将它们与 POST 提交一起传递:
<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";
}
客户有 3 个字符串字段,param1、param2、时间。一切似乎都很好,但是 processSubmit() 调用时的模型具有两倍的数据..for 2/3 字段:
param1: value1,value1
param2: value2,value2
time: Wed Oct 23 12:57:38 PDT 2013
所以时间很好,但是 param1 和 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"
并意识到由于某种原因,模型是用 2 个 value1、value4 的副本构建的,一个来自 form:hidden 的隐藏输入,一个来自该行,我相信。
我摆脱了 2 个隐藏的输入并且工作正常,但我不知道发生了什么的真正根本原因,所以如果有人想解释,我将不胜感激