9
respostas

Persistencia com Hibernate / Spring MVC

Pessoal, boa tarde!

Por favor preciso de uma ajuda para conseguir resolver uma duvida que tenho.

Classes:

Fornecedor, @Id codFornecedor.

Produto, @Id codProduto.

Vou criar a terceira classe de cadastro onde irei utilizar os atributos codFornecedor e codProduto.

Na pagina (jsp) o usuário vai digitar os respectivos códigos. Eu preciso fazer uma validação em cada tabela para verificar se existem os códigos, caso contrario retornar uma mensagem.

Como fazer essa validação sendo que recebo na classe Controller o objeto da classe (@Entity) ?

Nos controller FornecedorController e ProdutoController estou utilizando o código dessa maneira:

@InitBinder
    public void InitBinder(WebDataBinder binder) {
        binder.addValidators(new ProdutoValidation(dao));
    }



    @RequestMapping(method = RequestMethod.POST)
    public ModelAndView gravar(@Valid Produto produto, BindingResult result, 
            RedirectAttributes redirectAttributes) {
        if (result.hasErrors()) {
            return pform(produto);
        }
        dao.gravar(produto);
        redirectAttributes.addFlashAttribute("mensagem",
                "Produto " + produto.getCodOriginal() + " cadastrado com sucesso!");
        return new ModelAndView("redirect:produto");
    }
}
9 respostas

Thiago, tudo bem ?

Cara você pode disponibilizar a lista de cada um desses objetos e setar nesse seu objeto.

Você pode criar um selectno seu html com várias options.

Opa, Matheus, tudo ótimo!

Por favor, pode me dar um exemplo?

Esse é o controller da minha terceira classe.

@InitBinder
    public void InitBinder(WebDataBinder binder) {
        CotacaoValidation cotacaoValidation = new CotacaoValidation();
        binder.addValidators(cotacaoValidation);
    }    

    @RequestMapping(method = RequestMethod.POST)
    public ModelAndView gravar(@Valid Cotacao cotacao, BindingResult result, RedirectAttributes redirectAttributes) {
        if (result.hasErrors()) {
            return cform(cotacao);
        }         
        dao.gravar(cotacao);
        redirectAttributes.addFlashAttribute("mensagem", "Cotação n°: " + cotacao.getNumCotacao());
        return new ModelAndView("redirect:cotacao");
    }
   @RequestMapping(method = RequestMethod.get)
    public ModelAndView form() {
        ModelAndView mav = new ModelAndView("redirect:cotacao");
        mav.addObjetc("chaveDoSelect", lista);
        return mav;
    }

            <select >
                    <option value="">Selecione Sua opção</option>
                    <c:forEach var="objeto" items="${chaveDoSelect}">
                        <option value="${objeto.id}" >${objeto.textoASerMostrado}</option>
                    </c:forEach>
                </select>

No meu DAO vou fazer a lista dos produtos, por exemplo, com um select sem filtro, é isso?

Exatamente, e você os mostrará na página.

Cara, caso meu cadastro tenha muitos produtos, não travaria?

Porque terei que fazer dois select sem where para duas tabelas.

Você pode ter um cache disso por exemplo no banco, ai você ganharia um pouco mais de perfomance

Matheus, quero resolver de alguma outra forma.