我有一个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,time。 一切似乎都没问题,但是processSubmit()调用时的模型有两倍的数据...对于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 tag:
action="/chris/test1.htm?param1=value1&param2=value4"
并且意识到由于某种原因,该模型正在使用value1,value4的两个副本构建,一个来自形式的隐藏输入:隐藏,一个来自该行,我相信。
我摆脱了2个隐藏的输入和工作,但我不知道发生了什么的真正根本原因,所以如果有人想解释我会很感激