代码之家  ›  专栏  ›  技术社区  ›  Matt W

我的Spring3.0.3WebMVC应用程序中的<form:errors>标记未呈现验证错误。

  •  1
  • Matt W  · 技术社区  · 16 年前

    我正在开发一个图像呈现服务,它使用一组查询字符串参数作为参数,使用Spring3.0.3呈现图像。我正在尝试验证查询字符串参数并显示错误(如果存在)。

    验证似乎工作正常,因为bindingresult结果参数上的条件语句将在必要时显示错误视图。我不确定的是为什么标签不呈现和错误消息。我想我只是缺少一些关于在春季处理表单的关键概念。

    无论如何,下面是我用来实现这一点的各种代码:

    控制器:

    @Controller
    @RequestMapping( value = "/render" )
    public class RenderController 
    {
        @InitBinder
        public void initBinder( WebDataBinder binder )
        {
            binder.setValidator( new RenderJobValidator() );
        }
    
        @ModelAttribute
        public RenderJob newRenderJob( 
            @RequestParam( value = "icb", defaultValue = "" ) String icb, 
            @RequestParam( value = "icj", defaultValue = "" ) String icj,
            @RequestParam( value = "ics", defaultValue = "" ) String ics,
            @RequestParam( value = "icf", defaultValue = "" ) String icf,
            @RequestParam( value = "icc", defaultValue = "1" ) int icc,
            @RequestParam( value = "icd", defaultValue = "0" ) int icd )
        {
            RenderJob result = new RenderJob();
            result.setIcb( icb );
            result.setIcj( icj );
            result.setIcs( ics );
            result.setIcf( icf );
            result.setIcc( icc );
            result.setIcd( icd );
            return result;
        }
    
        @RequestMapping( method = RequestMethod.GET )
        public String handleJob( @Valid RenderJob renderJob, BindingResult result )
        {
            if( result.hasErrors() )
            {
                return "render/error";
            }
            return "render/debug";
        }
    }
    

    验证器:

    public class RenderJobValidator implements Validator 
    {
        @Override
        public boolean supports( Class<?> clazz ) 
        {
            return RenderJob.class.equals( clazz );
        }
    
        @Override
        public void validate( Object obj, Errors errors ) 
        {
            ValidationUtils.rejectIfEmptyOrWhitespace( errors, "icb", "Parameter 'icb' is required" );
            ValidationUtils.rejectIfEmptyOrWhitespace( errors, "icj", "Parameter 'icj' is required" );
            ValidationUtils.rejectIfEmptyOrWhitespace( errors, "ics", "Parameter 'ics' is required" );
            ValidationUtils.rejectIfEmptyOrWhitespace( errors, "icf", "Parameter 'icf' is required" );
        }
    }
    

    视图(web-inf/views/render/error.jsp

    <%@ page contentType="text/html;charset=UTF-8"%>
    <%@ page pageEncoding="UTF-8"%>
    <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <title>Render Error</title>
    </head>
    <body>
    <h1>Render Error</h1>
    <form:errors path="*"/>
    </body>
    </html>
    
    1 回复  |  直到 16 年前
        1
  •  4
  •   axtavt    16 年前

    什么时候? <form:errors> 用于 <form:form> ,它显示窗体命令对象的错误:

    <form:form commandName = "renderJob">
        <form:errors path = "*" />
    </form:form>
    

    否则,您需要完整的路径:

    <form:errors path = "renderJob.*" />