使用Validator接口时,showForm()中不显示错误消息

时间:2012-07-01 00:55:46

标签: java spring hibernate jsp

我使用Validator使用SimpleFormController接口与Spring MVC 3.0.2验证表单。以下是扩展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()方法完成后调用(In例如,通过单击JSP页面上的提交按钮提交页面)。

通过单击提交按钮提交页面时,errors.getTarget()方法中getCommand(request)(或showForm())的命令对象(在{{1}之后调用) }方法)不包含要在页面上显示的错误消息。命令对象(或域对象)与onSubmit()方法中的命令对象不同。 (因此,当onSubmit()方法被注释掉时,它会显示错误消息)

我需要使用showForm()方法在提交或加载页面时显示数据库中的数据列表。

当然,如下所示的showForm()方法可以解决问题。

referenceData()

但我想坚持使用protected Map referenceData(HttpServletRequest request, Object command, Errors errors) throws Exception { Map map=new HashMap(); return map; } 方法。在验证表单时使用showForm()方法时是否有一种公平的方式来显示错误消息?

1 个答案:

答案 0 :(得分:1)

在客户端,您可以使用错误对象的内容来显示错误以及表单。请注意,在Spring 3.0中不推荐使用onSubmit()和showForm()。

@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>

error是我们需要在spring中设置的属性。