繁体   English   中英

验证错误未被呈现 <form:errors> 在我的Spring 3.0.3 web MVC应用程序中标记

[英]Validation errors are not being rendered by <form:errors> tag in my Spring 3.0.3 web MVC app

我正在开发一个图像渲染服务,它使用一堆查询字符串参数作为参数来使用Spring 3.0.3渲染图像。 我正在尝试验证查询字符串参数并显示错误(如果存在)。

验证似乎工作正常,因为BindingResult结果参数上的条件语句将在必要时显示错误视图。 我不确定的是标记为什么不呈现和错误消息。 我猜我在Spring中处理表单方面缺少某种关键概念。

无论如何,这里是我用来尝试实现此目的的各种代码:

控制器:

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

<form:errors>是内部使用<form:form>时,它显示的形式的命令对象的错误:

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

否则你需要一个完整的路径:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM