またThe request sent by the client was syntactically incorectに会います.

8428 ワード

先日この問題に遭いました.http://www.cnblogs.com/xiandedanteng/p/4168609.html)問題は、ページのコンポーネントnameと注釈の@param名が一致していません.これは解決しやすく、一つ一つでいいです.
しかし、今回は状況が違っています.私のページコントロールはこのようなものです.
<p style="height:280px;display:block;">
    <span class="req">
        <label><input type="checkbox" value="A" name="to" />&nbsp;A</label>
        <label><input type="checkbox" value="B" name="to" />&nbsp;B</label>
        <label><input type="checkbox" value="C" name="to" />&nbsp;C</label>
    </span>
    <label><span></span></label>
</p>
コントローラはこう書きます.
@RequestMapping(value="/sendEmailReport")
    public String sendEmailReport(@RequestParam("idTxt") String id,
                                  @RequestParam("to") String[] to,
                                  @RequestParam("cc")  String[] cc,
                                  @RequestParam("bcc") String[] bcc,
                                  HttpServletRequest request,
                                  HttpServletResponse response){
。。。
}
見てください.to部分の対応は間違いないですが、問題が来ました.もしnameがtoのチェックボックスのセットが一つも選択されていないなら、ページを提出してからThe request sent by the client was syst incorectにエラーを報告します.
しかし、一つだけ選択しても、プログラムは正常に実行されます.
私はデフォルトの隠しチェックボックスを追加することでこのエラーを回避します.コードは以下の通りです.
<p style="height:280px;display:block;">
    <span class="req">
        <label><input type="checkbox" value="A" name="to" />&nbsp;A</label>
        <label><input type="checkbox" value="B" name="to" />&nbsp;B</label>
        <label><input type="checkbox" value="C" name="to" />&nbsp;C</label>
        <label><input type="checkbox" value="" checked name="to" style="display:none;"/></label>
    </span>
    <label><span></span></label>
</p>
このように、このチェックボックスをオンにする必要はありません.もちろん、バックグラウンドにフィルタを追加する必要があります.
SpringMVC自身の問題です.このBugを修正してほしいです.