2
respostas

Caso eu não tivesse os autores no banco, como eu poderia implementar a View ?

Por exemplo: Na mesma tela, caso eu queira inserir um novo autor sem um prévio cadastro no banco de dados, como eu poderia implementar o código para inserir um Inputtext onde eu pudesse adicionar o autor em uma lista, antes de persistir o Livro no banco de dados ?

Ou seja, remover o uso do "SelectOneMenu" e implementar um input para o autor e o botão para gravar o autor na lista.

// Modelo
public class Livro{
    private Long id;
    private String Titulo;
    private Integer quantidadePaginas;
    private List<Auto> autores = new ArrayList<Autor>();

// getter e setter ... 
}

public class Autor{
    private Long id;
    private String nome;
    private String email;
// getter e setter ... 
}

//Beans
public class LivroBean{
    private Livro livro = new Livro(); 

// ... metodos
}
//Form xhtml

//... imports 

<h:body>
        <h1>Novo Livro</h1>
        <h:form>
            <fieldset>
                <legend>Dados do Livro</legend>
                <h:panelGrid columns="2">

                    <h:outputLabel value="Titulo:" for="titulo" />
                    <h:inputText id="titulo" value="#{livroBean.livro.titulo}" />

                    <h:outputLabel value="quantidadePaginas:" for="quantpag" />
                    <h:inputText id="quantpag" value="#{livroBean.livro.quantidadePaginas}" />
                </h:panelGrid>
            </fieldset>

            <fieldset>
                <legend>Dados do Autor</legend>
                <h:panelGrid columns="3">

                    <h:outputLabel value="Autor:" />

        //*
 como implementar um InputText e adicionar os autores em uma lista, antes de persistir o Livro no banco ?
 *//
                    <h:commandButton action="#{livroBean.adicionarAutor}"
                        value="Adiciona Autor" />

                    <h:dataTable value="#{livroBean.autoresDoLivro}" var="autor">
                        <h:column>
                            <h:outputText value="#{autor.nome}" />
                        </h:column>
                        <h:column>
                            <h:outputText value="#{autor.email}" />
                        </h:column>
                    </h:dataTable>
                </h:panelGrid>
            </fieldset>

            <h:commandButton value="Gravar" action="#{livroBean.gravar}" />
        </h:form>

2 respostas

Que pena ninguém ter respondido, curso EAD está muito longe de substituir o presencial. Se essa é a intenção da Alura, acredito que terão que mudar e muito a abordagem atual. Uma dúvida que poderia ser simples, que um professor responderia rapidamente , acaba travando todo um cronograma de estudos e desmotivando o aprendizado. Bom, já estou em busca de um EAD mais 'humano' próximo ao aluno, se alguém puder me indicar eu agradeço. Minha cidade não possui oferta de cursos presenciais.

Oi Dario, tudo bem? Sinto muito por não termos conseguido te atender aqui no fórum. Confesso pra você que o fórum é um desafio grande pra gente. Estamos expandindo nosso time de especialistas para atender cada vez mais dúvidas.

É sim nosso objetivo ser um contato muito próximo do aluno, impulsionando o aprendizado e incentivo.

É uma pena que tenha se desmotiva e esteja procurando alternativas à nossa plataforma, contudo, entendo. Se for algo que realmente queira fazer, tudo bem.

Fica meu pedido de desculpas em relação ao ocorrido em nome da Alura.

Eu não tenho experiência com Java e JSF, por isso não consigo te ajudar em muita ciosa, mas vou buscar quem possa te indicar o caminho pra fazer o que pretende, se é que ainda precisa de ajuda.

Falando sobre a parte técnica do seu tópico.

Pelo que entendi, você não vai conseguir fazer com que o select de autores seja atualizado automaticamente de acordo com o input text de um novo autor. Para isso, existem duas soluções viáveis que posso sugerir.

  1. A primeira é relativa ao uso de AJAX, ao você teria uma parte do form responsável por cadastrar novos autores e essa parte do form poderia fazer uma requisição com JavaScript pra cadastrar o novo autor, pegar a nova lista e preencher/atualizar o select de autores.

  2. Você poderia ter uma área do form que dinamicamente criaria inputs de cadastro de autores, sem a necessidade de atualizar o select e sem nenhum ajax. Neste caso, na hora de submeter o seu formulário, na classe onde você trata a requisição e manipula os dados, você faria todo o processo de criação do(s) autor(es), salvar, associar ao livro e salvar o livro.

Das duas, julgo que a primeira alternativa é a mais simples, mas ela envolve JavaScript. Não sei o quão confortável você se sente com esse tipo de código.