1

我有一个 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&amp;param2=value4"

并意识到由于某种原因,模型是用 2 个 value1、value4 的副本构建的,一个来自 form:hidden 的隐藏输入,一个来自该行,我相信。

我摆脱了 2 个隐藏的输入并且工作正常,但我不知道发生了什么的真正根本原因,所以如果有人想解释,我将不胜感激

4

0 回答 0