0

Validatorを使用してSpringMVC3.0.2のインターフェイスを使用してフォームを検証していますSimpleFormController。以下は、を拡張するコントローラークラスSimpleFormControllerです。

@SuppressWarnings("deprecation")
final public class Temp extends SimpleFormController
{        
    public Temp()
    {
        setCommandClass(ValidationForm.class);
        setCommandName("validationForm");
    }

    @Override
    protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object command, BindException errors) throws Exception
    {
        ValidationBean validationBean=(ValidationBean) command;
        ModelAndView mv=new ModelAndView("Temp", "validationForm", validationBean);
        if(errors.hasErrors())
        {
            System.out.println("error");
        }
        else
        {
            System.out.println("name = "+validationBean.getUserName());
        }
        return mv;
    }        

    @Override
    protected ModelAndView showForm(HttpServletRequest request, HttpServletResponse response, BindException errors) throws Exception
    {
        ModelAndView mv=new ModelAndView("Temp", "validationForm", errors.getTarget());
        return mv;
    }
}

フォームの検証については疑問の余地はありません。正常に動作します。ここでの唯一の質問は、showForm(...){...}上記のメソッドを使用すると、JSPページの読み込み時とonSubmit()メソッドの完了後にこのメソッドが呼び出されるため、エラーメッセージが表示されないことです(この場合、ページは送信をクリックして送信されます) JSPページのボタン)。

送信ボタンをクリックしてページを送信すると、メソッド(メソッドの後に呼び出される)にあるerrors.getTarget()(またはgetCommand(request))コマンドオブジェクトには、ページに表示されるエラーメッセージが含まれていません。コマンドオブジェクト(またはドメインオブジェクト)は、メソッド内のコマンドオブジェクトとは異なります。(したがって、メソッドがコメント化されると、エラーメッセージが表示されます)showForm()onSubmit()onSubmit()showForm()

showForm()このメソッドを使用して、ページが送信またはロードされたときにデータベースのデータのリストを表示する必要があります。

もちろん、referenceData()以下に示す方法でうまくいきます。

protected Map referenceData(HttpServletRequest request, Object command, Errors errors) throws Exception
{    
    Map map=new HashMap();
    return map;
}

showForm()しかし、私はその方法に固執したいと思います。showForm()フォームの検証中にメソッドを使用しているときにエラーメッセージを表示する公正な方法はありますか?

4

1 に答える 1

1

クライアント側では、エラーオブジェクトの内容を使用して、フォームとともにエラーを表示できます。onSubmit()とshowForm()はSpring3.0で非推奨になっていることに注意してください。

@SuppressWarnings("deprecation") 
final public class Temp extends SimpleFormController 
{         
    public Temp() 
    { 
        setCommandClass(ValidationForm.class); 
        setCommandName("validationForm"); 
    } 

    @Override 
    protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object command, BindException errors) throws Exception 
    { 
        ValidationBean validationBean=(ValidationBean) command; 
        ModelAndView mv=new ModelAndView("Temp", "validationForm", validationBean); 
        if(errors.hasErrors()) 
        { 
            System.out.println("error"); 
            errors.reject("error.server.error");
            return showForm(request, response, errors);
        } 
        else 
        { 
            System.out.println("name = "+validationBean.getUserName()); 
        } 
        return mv; 
    }         

    @Override 
    protected ModelAndView showForm(HttpServletRequest request, HttpServletResponse response, BindException errors) throws Exception 
    { 
        ModelAndView mv=new ModelAndView("Temp", "validationForm", errors.getTarget()); 
        return mv; 
    } 
} 

サンプルJSPコード:

たとえば、jspでエラーメッセージを表示する必要がある場合は、次のように使用できます。

<span class="error">${error}</span>

エラーは、春に設定する必要のある属性です。

于 2012-07-02T02:57:18.520 に答える