DataTable não exibe os dados JSF [RESOLVIDO]

6 respostas Resolvido
jsf
G

Boa tarde, escrevi um código para realizar o cadastro de alguns produtos e exibi-los em uma dataTable. Os produtos são cadastrados dentro de um ArrayList e consigo exibi-los através do terminal de saída da IDE, mas eles não aparecem na dataTable. Poderiam me dar uma ajuda para resolver esse problema?

Página de exibição:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:decorate xmlns="http://www.w3.org/1999/xhtml"
             xmlns:h="http://xmlns.jcp.org/jsf/html"   
             xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
             xmlns:p="http://primefaces.org/ui"
             xmlns:f="http://xmlns.jcp.org/jsf/core"
             template="template.xhtml">
    
    <ui:define name="conteudo">
        <h:form id="form">
                <p:dataTable id="tabela" var="produtos" value="#{bean.produtos}">
                    <f:facet name="header">
                        Produtos
                    </f:facet>
                    <p:column headerText="Nome">
                        <h:outputText value="#{produtos.nome}"/>
                    </p:column>
                    <p:column headerText="Valor">
                        <h:outputText value="#{produtos.valor}"/>
                    </p:column>
                    <p:column headerText="Código">
                        <h:outputText value="#{produtos.codigo}"/>
                    </p:column>
                </p:dataTable> 
        </h:form>
    </ui:define>
</ui:decorate>

Página de cadastro

<ui:define name=“conteudo”>



Cadastrar Produtos

<h:form>

<h:panelGrid columns=“2”>

<h:outputLabel value=“Nome: />

<h:inputText id=“nome” value=”#{bean.prod.nome}”/>

<h:outputLabel value=“Valor: />

<h:inputText id=“valor” value=”#{bean.prod.valor}”/>

<h:outputLabel value=“Código: />

<h:inputText id=“codigo” value=”#{bean.prod.codigo}”/>

</h:panelGrid>

<h:commandButton value=“Cadastrar” action="#{bean.cadastrarProduto()}"

style=“background-color: bisque”>

</h:commandButton>

</h:form>



</ui:define>

Bean

public class Bean {

/**
 * Creates a new instance of Bean
 */
public Bean() {
}
//Arrays

private ArrayList produtos = new ArrayList();

//Variáveis

private Produto prod = new Produto();

//Getters e Setters

public ArrayList getProdutos() {

return produtos;

}
public void setProdutos(ArrayList<Produto> produtos) {
    this.produtos = produtos;
}

public Produto getProd() {
    return prod;
}

public void setProd(Produto prod) {
    this.prod = prod;
}
public void cadastrarProduto(){
    Produto auxiliar01 = new Produto();
    
    auxiliar01.setNome(prod.getNome());
    auxiliar01.setValor(prod.getValor());
    auxiliar01.setCodigo(prod.getCodigo());
    
    produtos.add(auxiliar01);
    
    prod.setNome("");
    prod.setValor("");
    prod.setCodigo("");
    
    imprimirPrompt();
}

6 Respostas

M

É assim que você criou o seu bean?
Sem anotação?

M
Solucao aceita

Faltam as anotações e você deve retirar o () do Commandbutton, você também precisa adicionar a ele processo="@form" e ajax=“false” uma vez que você utilizou action ao invés de actionListener

M

Não é necessário tirar o ().
Ele esta usando h:commandButton, não tem process e nem ajax.

G

Desculpe a demora Mike, tive uns problemas com o computador.
No momento de enviar esqueci de colocar as anotações, mas resultou que o problema estava lá mesmo, meu código continha o @RequestScoped, modifiquei para @SessionScoped e então passou a funcionar corretamente.
Muito obrigado pela atenção e mais uma vez desculpa a demora.

G

Murilo, fiz aqui as alterações das anotações e também estas que me recomendou, ficou bem bacana e está funcionando corretamente agora. Muito obrigado pela atenção.

M

Sim, se tivesse postado as anotações o problema seria resolvido rapidinho :slight_smile:
Se estiver na mesma view, o ViewScoped pode ser usado também.

Magina :+1:

Criado 7 de julho de 2018
Ultima resposta 17 de jul. de 2018
Respostas 6
Participantes 3