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

Alterar

Por algum motivo o nome do autor não aparece no inputText quando tento alterá-lo.

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:f="http://java.sun.com/jsf/core">

<ui:composition template="_template.xhtml">
    <ui:define name="titulo">Novo autor</ui:define>

    <ui:define name="conteudo">
        <h:form id="formAutor">
            <h:messages></h: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}"
                        required="true"
                        requiredMessage="É necessário preencher o campo autor"
                        validatorMessage="Mínimo de 3 caracteres e máximo 50">
                        <f:validateLength minimum="3" maximum="50" />
                    </h:inputText>
                    <h:commandButton value="Gravar" action="#{autorBean.gravar}" />
                </h:panelGrid>
            </fieldset>
        </h:form>

        <h:form>
            <fieldset>
                <legend>Autores</legend>
                <h:dataTable value="#{autorBean.lista()}" var="autor">
                    <h:column>
                        <f:facet name="header">Nome</f:facet>
                        <h:outputText value="#{autor.nome}" />
                    </h:column>
                    <h:column>
                        <f:facet name="remove">Remover</f:facet>
                        <h:commandLink value="remove"
                            action="#{autorBean.removeAutor(autor)}" />
                    </h:column>
                    <h:column>
                        <f:facet name="header">Atualizar</f:facet>
                        <h:commandLink value="atualiza" action="autorBean.carregar(autor)">
                        </h:commandLink>
                    </h:column>

                </h:dataTable>
            </fieldset>
        </h:form>
    </ui:define>


    <ui:define name="texto"></ui:define>
</ui:composition>

</html>
@ManagedBean
@ViewScoped
public class AutorBean {

    private Autor autor = new Autor();

    public Autor getAutor() {
        return autor;
    }

    public String gravar() {
        System.out.println("Gravando autor " + this.autor.getNome());
        if (this.autor.getId() == null) {
            new DAO<Autor>(Autor.class).adiciona(this.autor);
            return "livro?faces-redirect=true";
        } else {
            new DAO<Autor>(Autor.class).atualiza(this.autor);
            new FacesMessage("Autor foi atualizado!");
        }

        return "livro?faces-redirect=true";
    }

    public List<Autor> lista() {
        return new DAO<Autor>(Autor.class).listaTodos();
    }

    public void removeAutor(Autor autor) {
        new DAO<Autor>(Autor.class).remove(autor);
    }

    public void carregar(Autor autor) {
        this.autor = autor;
    }
}
4 respostas

Beatriz,

acho que esta faltando o setAutor

public void setAutor(Autor autor) {
        this.autor = autor;
    }

Provavelmente o que falta é o método get:

public Autor getAutor() {
        return this.autor;
    }
solução!

Oi, Beatriz.

Faltou você indicar que é uma chamada pro bean com a tag #{} no botão atualizar.

No caso, ficaria

<h:commandLink value="atualiza" action="#{autorBean.carregar(autor)}">

Muito obrigada pela ajuda Hugo! Por falta de atenção eu não tinha percebido esse detalhe.