Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

HTTP Status 500 - java.lang.IllegalArgumentException: id to load is required for loading

Ocorreu esse erro! Estou tentando resolver o desafio CRUD do autor.

<h:form id="autor">
            <h:messages id="messages" />
            <fieldset>
                <legend>Dados do Autor</legend>
                <h:panelGrid columns="2">
                    <h:outputLabel value="Nome:" for="nome" />
                    <h:inputText id="nome" value="#{autorBean.autor.nome}">
                        <f:ajax event="blur" render="messages" />
                    </h:inputText>
                    <h:commandButton value="Gravar" action="#{autorBean.gravarAutor}" />
                </h:panelGrid>
            </fieldset>
//resto do form abaixo
    // METODO gravar autor
    public void gravarAutor() {
        Autor autor = new DAO<Autor>(Autor.class).buscaPorId(autorId);
        if (autor == null) {
            this.livro.adicionaAutor(autor);
        } else {
            new DAO<Autor>(Autor.class).atualiza(autor);
        }
        System.out.println("Livro do autor " + autor.getNome());
    }
2 respostas
solução!

Eduardo

no seu método tem uma buscaPorId(autorId) que não sei se esta correto. O Id só esta carregado quando você vai atualizar algum autor, quando você vai gravar um novo autor, ele esta null. Você precisa trata-lo, da mesma forma que foi tratado o livro no LivroBean:

if (this.autor.getId() == null) {
            new DAO<Autor>(Autor.class).adiciona(this.autor);
        } else {
            new DAO<Autor>(Autor.class).atualiza(this.autor);
        }

Além disso, você esta usando o livro.adicionaAutor do livro, você precisa usar o new DAO(Autor.class).adiciona(this.autor);

Realmente Jefferson, o problema foi resolvido, muito obrigado. Outro problema é na atualização, quando tento alterar um autor é criado outro. Pode me ajudar nisso?