1

liferay を使用してカスタム ポートレット (mvc ポートレット) を開発しています。問題は、HTML の jsp ページに 1 つのフォームがあり、フォームのいくつかのフィールドを検証し、送信ボタンで別のページにリダイレクトすることです。私が行った検証は機能していますが、送信ボタンをクリックすると別のページにリダイレクトされ、そのページではliferayからのデフォルトエラーが表示されます。私が望むのは、検証がfalseであるフィールドの近くにエラーメッセージが表示されてリクエストが完了しなかった場合、同じページを表示することです。

この問題を解決するにはどうすればよいですか?

これは、アクションクラスにメソッドを追加しながら検証をチェックするための私のコードです

public void addRestaurant(ActionRequest リクエスト、ActionResponse レスポンス) {

    log.info("Inside addRegistration");
    List<String> errors = new ArrayList<String>();

    restaurant rest = RestaurantActionUtil
            .getRestaurantFromRequest(request);
    boolean restValid = RestaurantValidator
            .validateRestaurant(rest, errors);
    if (restValid) {
        try {
            log.info(rest);

            restaurant test = restaurantLocalServiceUtil
                    .addrestaurant(rest);
            if (test == null) {
                log.error("Restaurant was Found Null");
                response.setRenderParameter("jspPage", errorJSP);
                return;
            }
        } catch (SystemException e) {
            log.error(e);
            /*
             * If there is an error then divert the control to the error
             * page.
             */
            response.setRenderParameter("jspPage", errorJSP);
            return;
        }
        SessionMessages.add(request, "restaurant-added");
        return;
    } else {
        for (String error : errors) {
            SessionErrors.add(request, error);
        }
        SessionErrors.add(request, "error-while-adding");
        request.setAttribute("rest", rest);

        return;
    }

}

これは私のバリデータークラスです

public class RestaurantValidator {

public static boolean validateRestaurant(restaurant rest, List errors) {

    boolean valid=true ;
    if (Validator.isNull(rest.getName())) {
        errors.add("Name-required");
        valid = false;
    }
    if (Validator.isNull(rest.getLicensekey())) {
        errors.add("license-key-required");
        valid = false;
    }

以下は私のview.jspコードです

レストラン名* " />

                                    <span class="help-block">help block</span>
                                </div>                                    
                            </div>
                            <div class="row-fluid">
                                <div class="span12">
                                    <label>License Key<span class="f_req">*</span></label>
                                   <liferay-ui:error key="license-key-required" message="license-key-required" />

                                    <input type="text" name="licensekey" class="span8" value="<%=restaurantOBJ.getLicensekey() %>"/>
                                </div>                                    
                            </div>

同じページではなく、次の方法でリダイレクトされたページにエラーメッセージが表示されます「Name_required」のエラーで名前のテキストボックスの近くにエラーが必要

エラーメッセージは、同じページではなく、リダイレクトされたページに次のように表示されます。名前テキストボックスの近くに「Name_required」というエラーが表示されます。

ここに画像の説明を入力

私が欲しいのは、名前が空白の場合、フォームを送信せず、view.jspページの名前のテキストボックスの近くでエラーが発生することです。

4

1 に答える 1

0

私はあなたの質問に答えようとします。検証が失敗した場合は、メソッドactionResponse.setRenderParameter("valid", "NO");に a を設定してみてください。addRestaurant

メソッドでこのパラメーターを取得し、それに応じてこのメソッドdoViewで設定します。メソッドの最後に。renderPageinclude(renderPage, renderRequest, renderResponse);doView

質問のすべての情報をバリデータ メソッドのような適切な形式で提供し<aui:form>、javascript メソッドを呼び出すonSubmitことができれば、他の解決策を探すことができます。

それまでの間、これを試してみて、動作するかどうかを確認してください。:-)

于 2012-10-25T13:25:58.040 に答える