Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

SortyBy não funcionou

O atributo sortBy pelo titulo e ISBN não funcionou, mesmo fazendo o cacheamento como informado no exercício. Não sei o que estou fazendo errado

@ManagedBean
@ViewScoped
public class LivroBean implements Serializable {

    private static final long serialVersionUID = 1L;

    private Livro livro = new Livro();
    private Integer autorId;
    private Integer livroId;
    private List<Livro> livros;

    public void carregarLivroPeloId() {
        this.livro = new DAO<Livro>(Livro.class).buscaPorId(livroId);
    }

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

    }

    public List<Livro> getLivros() {

    DAO<Livro> dao = new DAO<Livro>(Livro.class);
    if(this.livros == null) {
        this.livros = dao.listaTodos();            
    }

    return livros;
}
    public List<Autor> getAutoresDoLivro() {
        return this.livro.getAutores();
    }

    public void gravar() {
        System.out.println("Gravando livro " + this.livro.getTitulo());

        if (livro.getAutores().isEmpty()) {
            // throw new RuntimeException("Livro deve ter pelo menos um Autor.");
            FacesContext.getCurrentInstance().addMessage("autor",
                    new FacesMessage("Livro deve ter pelo menos um Autor."));// pegando a exception e jogando como
                                                                                // mensagem na tela
            return;
        }
        // IF para incluir se for um livro novo ou atualizar os dados de um livro
        DAO<Livro> dao = new DAO<Livro>(Livro.class);
        if (this.livro.getId() == null) {
            dao.adiciona(this.livro);
            this.livros = dao.listaTodos();

        } else {
            dao.atualiza(livro);
        }

        this.livro = new Livro();
    }

    // carregando livro nos textbox para alteração
    public void carregar(Livro livro) {
        System.out.println("Carregando livro: '" + livro.getTitulo() + "' para alteracao");
        this.livro = livro;

    }

    // metodo para remover o livro
    public void remover(Livro livro) {
        System.out.println("Removendo livro: " + livro.getTitulo());
        new DAO<Livro>(Livro.class).remove(livro);
    }

    public void gravarAutor() {
        Autor autor = new DAO<Autor>(Autor.class).buscaPorId(this.autorId);
        this.livro.adicionaAutor(autor);
    }

    // Removendo autor do livro e usando o metodo na classe Livro.
    public void removerAutorDoLivro(Autor autor) {
        this.livro.removeAutor(autor);
    }

    // Tratamento de validação manual do xhtml
    public void comecaComDigitoUm(FacesContext fc, UIComponent component, Object value) throws ValidatorException {
        String valor = value.toString();
        if (!valor.startsWith("1")) {
            throw new ValidatorException(new FacesMessage("ISBN Deveria começar com 1"));
        }
    }

    public Integer getLivroId() {
        return livroId;
    }

    public void setLivroId(Integer livroId) {
        this.livroId = livroId;
    }

    public Integer getAutorId() {
        return autorId;
    }

    public void setAutorId(Integer autorId) {
        this.autorId = autorId;
    }

    public Livro getLivro() {
        return livro;
    }

    public void setLivro(Livro livro) {
        this.livro = livro;
    }



    public void setLivros(List<Livro> livros) {
        this.livros = livros;
    }

}

.

<h:form id="tabelaDeLivros">
        <br />

                <p:dataTable id="tabelaLivros" value="#{livroBean.livros}"
                    var="livro">
                    <!--o atributo headerText subtitui o f:facet  -->
                    <f:facet name="header">Livros</f:facet>

                    <p:column headerText="titulo" sortBy="#{livro.titulo}">
                        <h:outputText value="#{livro.titulo}" />
                    </p:column>

                    <p:column headerText="ISBN" sortBy="#{livro.isbn}">
                        <h:outputText value="#{livro.isbn}" />
                    </p:column>

                    <p:column>
                        <f:facet name="header">Preço</f:facet>
                        <h:outputText value="#{livro.preco}">
                            <f:convertNumber type="currenty" pattern="R$ 0.00"
                                currencySymbol="R$" locale="pt_BR" />
                        </h:outputText>
                    </p:column>

                    <p:column>
                        <f:facet name="header">Data</f:facet>
                        <h:outputText value="#{livro.dataLancamento.time}">
                            <f:convertDateTime pattern="dd/MM/yyy HH:mm" />
                            <!-- timeZone="America/Sao_Paulo" -->
                        </h:outputText>
                    </p:column>
                    <!--CARREGANDO DADOS PARA O TEXT BOX E PERMITE ALTERAÇÂO  -->
                    <p:column>
                        <f:facet name="header">Alterar</f:facet>
                        <h:commandLink value="Alterar">
                            <f:setPropertyActionListener target="#{livroBean.livro}" value="#{livro}" /> <!-- esta tag  -->
                        </h:commandLink>
                    </p:column>
                    <!--EFETUA REMOÇÃO DO LIVRO  -->
                    <p:column  >
                        <f:facet name="header">Remover</f:facet>
                        <h:commandLink value="remove" action="#{livroBean.remover(livro)}"></h:commandLink>
                    </p:column>
                </p:dataTable>
1 resposta
solução!

Problema resolvido. Estava copilando no computador de casa com outra versao do JDK.