1

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&amp;param2=value4"

そして、何らかの理由で、モデルが value1、value4 の 2 つのコピーで構築されていることに気付きました。

私は2つの隠された入力を取り除き、物事はうまくいきましたが、何が起こっているのか本当の根本的な原因はわかりません。誰かが説明したい場合は感謝します

4

0 に答える 0