Je développe un service de rendu d'images qui prend une série de paramètres de chaîne de requête en tant qu'arguments pour afficher une image en utilisant Spring 3.0.3. J'essaie de valider les paramètres de la chaîne de requête et d'afficher des erreurs le cas échéant.
La validation semble fonctionner correctement car l'instruction conditionnelle sur le paramètre result de BindingResult affichera la vue d'erreur lorsque c'est nécessaire. Ce dont je ne suis pas sûr, c'est pourquoi la balise ne rend pas les messages d'erreur. Je suppose que je manque simplement d'un concept crucial en ce qui concerne le traitement des formulaires en Spring.
En tout cas, voici les différents morceaux de code que j'utilise pour essayer d'atteindre cela :
Contrôleur :
@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";
}
}
Validateur :
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", "Le paramètre 'icb' est requis");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "icj", "Le paramètre 'icj' est requis");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "ics", "Le paramètre 'ics' est requis");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "icf", "Le paramètre 'icf' est requis");
}
}
Vue (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" %>
Erreur de rendu
Erreur de rendu