2
respostas

Invalid target for Validator

Estou fazendo um trabalho para a faculdade e estou utilizando o spring. ao usar o validador ele verifica os campos perfeitamente mas quando chamo o método que lista ele retorna um erro falando que o não é um alvo valido mesmo nao tendo nenhuma anotação de @valid nesse método.

controller

@Controller
public class AppController {

    @Autowired
    private AppDao appDao;

    @Autowired
    private UsuarioDao usuarioDao;

    @InitBinder
    public void initBinder(WebDataBinder binder){
        binder.addValidators(new AppValidation());
    }

    @RequestMapping("/app/formApp")
    public ModelAndView formApp() {

        return new ModelAndView("/app/formApp");
    }

    @RequestMapping(value = "/app", method = RequestMethod.POST)
    public ModelAndView salva(@Valid App app, BindingResult result, RedirectAttributes redirectAttributes) {


        if(result.hasErrors()){
            return formApp();
        }

        Usuario usuario = usuarioDao.localizarPorId(1);

        app.setUsuario(usuario);

        appDao.salva(app);

        redirectAttributes.addFlashAttribute("mensagemUsuarioSucesso", "App cadastrado com sucesso!");

        return new ModelAndView("redirect:app");
    }

    @RequestMapping(value = "/app", method = RequestMethod.GET)
    public ModelAndView paginaUsuario() {

        return new ModelAndView("/usuario/paginaUsuario");
    }

    @RequestMapping("/app/listaApp")
    public ModelAndView listar() {

        ModelAndView modelAndView = new ModelAndView("/app/listaApp");

        Usuario usuario = usuarioDao.localizarPorId(1);

        modelAndView.addObject("apps", usuarioDao.getApps(usuario));
        modelAndView.addObject("usuario", usuario);

        return modelAndView;
    }
}

validation:

public class AppValidation implements Validator{

    @Override
    public boolean supports(Class<?> clazz) {

        return App.class.isAssignableFrom(clazz);
    }

    @Override
    public void validate(Object target, Errors errors) {

        ValidationUtils.rejectIfEmpty(errors, "nome", "field.required");

        ValidationUtils.rejectIfEmpty(errors, "link", "field.required");

    }
}
2 respostas

consegui isolar o problema, aparentemente quando tento passar o usuario pelo modelAndView é o que causa o problema.

```@RequestMapping("/app/listaApp") public ModelAndView listar() {

ModelAndView modelAndView = new ModelAndView("/app/listaApp");

Usuario usuario = usuarioDao.localizarPorId(1);

modelAndView.addObject("usuario", usuario);// CAUSA DO PROBLEMA modelAndView.addObject("apps", usuario.getApps());

return modelAndView; } ```

@RequestMapping("/app/listaApp") public ModelAndView listar() {

ModelAndView modelAndView = new ModelAndView("/app/listaApp");

Usuario usuario = usuarioDao.localizarPorId(1);

modelAndView.addObject("usuario", usuario);// CAUSA DO PROBLEMA modelAndView.addObject("apps", usuario.getApps());

return modelAndView; }