Я разрабатываю сервис рендеринга изображений, который принимает набор параметров строки запроса в качестве аргументов для рендеринга изображения с помощью 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>