1

いくつかのリクエストパラメータを取得し、Springバリデーターで検証したいというシナリオがあります。Springバリデーターでリクエストパラメーターを取得する方法を教えてもらえますか?

ありがとう。

<c:forEach items="${serviceLocaleList}" var="item" varStatus="count">

                    <table>
                    <tr>
                    <td width="2%" class="formbutton1">
                        <a id="displayText" href="javascript:toggleDivVisibility('myDiv'+'<c:out value="${count.index}"/>',document.getElementById('plusMinusImg'+'<c:out value="${count.index}"/>'))" >
                            <img alt="Show/Hide Filters" src="../images/fold-collapse.gif" id="plusMinusImg<c:out value="${count.index}"/>" />
                        </a>
                    </td>
                    <td width="98%" class="formbutton1" valign="middle" align="left">
                        <b><c:out value="${item.language}"></c:out></b>
                    </td></tr>
                    </table>
                    <input type="hidden" name="language<c:out value="${count.index}"/>" value="<c:out value='${item.language}'/>">

                    <div id="myDiv<c:out value="${count.index}"/>" style="display: block">

                        <table width="100%" border="0" align="center" cellpadding="0"
                            cellspacing="0" style="border: 1px solid black;">

                                    <tr>
                                        <td class="tabRowLeft" width="20%"><fmt:message key='name' /><font color="#FF0000">*</font></td>
                                        <td class="partner_regn_tr" width="70%">
                                            <input id="Name<c:out value="${count.index}"/>" type="text" size="83" maxlength="25" name="Name<c:out value="${count.index}"/>"  disabled/>
                                            <font color="#FF0000">&nbsp;&nbsp;</font>
                                        </td>
                                    </tr>

私の要件は、動的にローカライズされたデータを取得して検証することです。私は実際にコントローラーでカスタムバリデーターメソッドを呼び出すことによってこれを行っています。

ServiceRegistrationValidator validator = (ServiceRegistrationValidator) getValidator();
//Validate all the request parameters that belongs to Sevrice presentation
validator.validateHttpRequestParameters(request, errors);

上記のコード行で、検証は正常に機能しています。しかし、検証エラーがあると、ユーザーデータが消去されていることがわかりました。コマンドオブジェクトに設定されていないためです。

requestParameterから読み取った後、commanオブジェクトに設定してみました。ただし、春のバリデーターはonSubmitを呼び出す前に呼び出されます。そのため、ローカライズされていない他のフィールドの検証エラーが発生すると、ローカライズされたフィールドに入力されたユーザーデータが誤って表示されます。

したがって、上記の問題を解決するために、バリデーターでrequestParametersを読み取りたいと思います。解決策があれば教えてください。

4

1 に答える 1

1

この方法を試してください、

コントローラの@RequestParamタグを使用してリクエストパラメータを取得します

リクエストパラメータをコマンドオブジェクトに設定します

コマンドオブジェクトをバリデーターに渡します。

例えば:

@RequestMapping(method=RequestMethod.GET)
public ModelAndView getRequestParams(@RequestParam("abc") String param1 , @RequestParam("def") String param2, HttpServletRequest request, HttpServletResponse response){
   CommandObject commObj = new CommandObject();
   AbcValidator validator = new AbcValidator();
   commanObj.setParam1(param1);
   commanObj.setParam2(param2);
   validator.validate(commandObj);

}

commandObj、バリデーターを注入することをお勧めします。上記の例を試してください。

于 2012-07-23T07:17:59.353 に答える