Are there any restrictions on jsf 2.2.5 with the Collection interface?

0

I'm running an application with jsf 2.2.5 . I used the h:dataTable component to display an object collection on the screen. I added to this component two h:commandLink , one that must perform one edit method and one remove method to interact with its object in each iteration of the collection.

If you pass to the component h:dataTable a TreeMap<> that is retrieved through a managed bean , of a static attribute of a certain class, it works normally. However, when I filter this collection and return a List<> with some of the objects in the collection (this is assigned to a managed bean attribute before being sent to the view ) the two h:commandLink stop working, the methods to which they are associated do not even run.

Follow the view's code:

...
<h:form acceptcharset="ISO-8859-1" id="lista" styleClass="col-xs-12 box" rendered="#{gerenciarLivro.resultadoDaPesquisa.size() > 0}">
    <h:dataTable  value="#{gerenciarLivro.resultadoDaPesquisa}"  var="livro"  >
        <h:column >
            <fieldset >
                <div class="col-xs-10 col-sm-10 col-md-11 pull-left">
                    <div class="col-xs-12 col-sm-12">
            <label>
                <strong>#{livro.titulo}</strong>
            </label>
                    </div>
                    <div class="col-xs-6 col-sm-6">
            <label class="text-info" >#{livro.autor}</label>
                    </div>
                    <div class="col-xs-6 col-sm-6">
            <label>#{livro.editora}</label>
                    </div>
                    <div class="col-xs-6 col-sm-3">
            <label>#{livro.genero}</label>
                    </div>
                    <div class="col-xs-6 col-sm-3">
            <label>#{livro.ISBN}</label>
                    </div>
                    <div class="col-xs-6 col-sm-3">
            <label>#{livro.ano}</label>
                    </div>
                    <div class="col-xs-6 col-sm-3">
            <label>#{livro.edicao}</label>
                    </div>
                </div>
                <div class="col-xs-2 col-sm-2 col-md-1 pull-right">
                    <div class="plus">
            <i class="glyphicon glyphicon-plus"> </i>
                    </div>
                </div>
                <div class="col-xs-12 sub hide">
                    <div class="form-group col-xs-4">
            <h:commandLink styleClass="btn btn-xs btn-inverse col-xs-12" action="#{gerenciarLivro.removerLivro(livro)}">
                <f:ajax />
                <i class="glyphicon glyphicon-trash pull-left"> </i> Remover
            </h:commandLink>
                    </div>
                    <div class="form-group col-xs-4">
            <h:commandLink styleClass="btn btn-xs btn-primary col-xs-12" action="#{gerenciarLivro.editarLivro()}">
                <f:ajax />
                <i class="glyphicon glyphicon-edit pull-left"> </i> Editar
            </h:commandLink>
                    </div>
                    <div class="form-group col-xs-4">
            <button class="btn btn-xs btn-primary col-xs-12" >
                <i class="glyphicon glyphicon-book pull-left"></i> Fila de espera
            </button>
                    </div>
                </div>
            </fieldset>
        </h:column>
    </h:dataTable>
</h:form>
...

Following the Managed bean code:

...
@Named(value = "gerenciarLivro")
@RequestScoped
public class GerenciarLivroMB implements Serializable {

private String ISBN;
private String titulo;
private String autor;
private String editora;
private String genero;
private String ano;
private String edicao;
@Inject
private ControleDeLivro controle;
private List<Livro> resultadoDaPesquisa;

public void adicionarLivro() {
    controle.adicionar(construirLivro());
    limparDados();
}

public String removerLivro(Livro l) {
    controle.remover(l);
    resultadoDaPesquisa.remove(l);
    return ("removerLivro");
}

public String editarLivro(Livro l) {
    return ("editarLivro");
}

public Collection<Livro> getLivros() {
    return Repositorio.livros();
}

public Collection<Livro> getResultadoDaPesquisa() {
    return resultadoDaPesquisa;
}

public void pesquisarLivro() {
    if (resultadoDaPesquisa != null) {
        resultadoDaPesquisa.clear();
    }
    resultadoDaPesquisa = controle.pesquisar(construirLivro());
    limparDados();
}

private void limparDados() {
    ISBN = "";
    titulo = "";
    autor = "";
    editora = "";
    genero = "";
    ano = "";
    edicao = "";
}

private Livro construirLivro() {
    Livro l = new Livro();
    if (ISBN != null && !ISBN.isEmpty()) {
        l.setISBN(ISBN);
    }
    if (titulo != null && !titulo.isEmpty()) {
        l.setTitulo(titulo);
    }
    if (autor != null && !autor.isEmpty()) {
        l.setAutor(autor);
    }
    if (editora != null && !editora.isEmpty()) {
        l.setEditora(editora);
    }
    if (genero != null && !genero.isEmpty()) {
        l.setGenero(genero);
    }
    if (ano != null && !ano.isEmpty()) {
        l.setAno(ano);
    }
    if (edicao != null && !edicao.isEmpty()) {
        l.setEdicao(edicao);
    }
    return l;
}
...
outros getters e setters.

When I use the collection coming from this class everything works perfectly:

public class Repositorio {

    private static TreeSet<Livro> livros;
    private static List<Emprestimo> emprestimo;
    private static Deque<Emprestimo> devolucao;

    public static TreeSet<Livro> livros() {
        if (livros == null) {
            livros = new TreeSet<>();
        }
        return livros;
    }

    public static List<Emprestimo> emprestimo() {
        if (emprestimo == null) {
            emprestimo = new ArrayList<>();
        }
        return emprestimo;
    }

    public static Deque<Emprestimo> devolucao() {
        if (devolucao == null) {
            devolucao = new ArrayDeque<>();
        }
        return devolucao;
    }
}
    
asked by anonymous 30.09.2014 / 03:16

0 answers