No PrimeFace 2.1, meu dataTable fica com style display none ao gerar

7 respostas
tebosoftware

Bom dia pessoal

Estou testando o PrimeFaces e ao tentar utilizar o dataTable, seguindo o modelo no site, bem simples sem complicação nenhum, notei que o código html o table fica com um style display none. Não sei porque pois não configurei nada diferente. Abaixo segue os códigos:

EstadoController.java
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.tebosoftware.controller.endereco;

import br.tebosoftware.dao.endereco.EstadoDao;
import br.tebosoftware.model.endereco.Estado;
import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Logger;

/**
 *
 * @author Shubacca
 */
public class EstadoController {

    private EstadoDao estadoDao;
    private List<Estado> dados;
    private Estado estado;
    private String erro;
    private boolean novo = false;
    private boolean editando = false;

    /** Creates a new instance of EstadoController */
    public EstadoController() {
        estadoDao = new EstadoDao();
        dados = new ArrayList<Estado>();
        estado = new Estado();
        pesquisar();
    }

    public List<Estado> getDados() {
        return dados;
    }

    public void setDados(List<Estado> dados) {
        this.dados = dados;
    }

    public Estado getEstado() {
        return estado;
    }

    public void setEstado(Estado estado) {
        this.estado = estado;
    }

    public void pesquisar() {
        dados.clear();
        dados.addAll(estadoDao.listar());
    }

    public String getErro() {
        return erro;
    }

    public void gravar() {
        try {
            estadoDao.gravar(estado);
            novo = false;
            editando = false;
        } catch (Exception e) {
            Logger.getLogger(getClass()).error("Erro ao gravar", e);
            erro = "Erro ao gravar";
        }
    }

    public void novo() {
        estado = new Estado();
        novo = true;
        editar();
    }

    public void editar() {
        editando = true;
    }

    public void excluir() {
        try {
            estadoDao.excluir(estado);
            estado = new Estado();
            novo = false;
            editando = false;
        } catch (Exception e) {
            Logger.getLogger(getClass()).error("Erro ao excluir", e);
            erro = "Erro ao excluir";
        }
    }

    public void setSigla(String sigla) {
        estadoDao.setSigla(sigla);
    }

    public String getSigla() {
        return estadoDao.getSigla();
    }

    public void setDescricao(String descricao) {
        estadoDao.setDescricao(descricao);
    }

    public String getDescricao() {
        return estadoDao.getDescricao();
    }

    public boolean isEditando() {
        return editando;
    }

    public boolean isNovo() {
        return novo;
    }

    public void cancelar(){
        estado = new Estado();
        novo = false;
        editando = false;
    }
}

index.xhtml

<?xml version='1.0' encoding='ISO-8859-1' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:p="http://primefaces.prime.com.tr/ui">
    <f:view>
        <h:head>
            <title>Teste de Cadastro de Estado</title>
        </h:head>
        <h:body>
            <h:form>
                <h:panelGrid columns="2">
                    <h:outputText value="Sigla:" />
                    <h:inputText value="#{estadoController.sigla}" size="2" maxlength="2" />
                    <h:outputText value="Descrição:" />
                    <h:inputText value="#{estadoController.descricao}" size="40" maxlength="40" />
                    <p:commandButton action="#{estadoController.pesquisar}" value="Pesquisar" update="dados" />
                    <p:commandButton action="#{estadoController.novo}" value="Novo" update="edicao" />
                </h:panelGrid>
                <p:dataTable 
                    id="dados"
                    var="estado"
                    value="#{estadoController.dados}"
                    style="display: block">
                    <p:column>
                        <f:facet name="header">Sigla</f:facet>
                        <h:outputText value="#{estado.sigla}" />
                    </p:column>
                    <p:column>
                        <f:facet name="header">Descrição</f:facet>
                        <h:outputText value="#{estado.descricao}" />
                    </p:column>
                </p:dataTable>
                <h:panelGrid id="edicao" columns="2" rendered="#{estadoController.editando}">
                    <h:outputText value="Sigla:" />
                    <h:inputText value="#{estadoController.estado.sigla}" maxlength="2" />
                    <h:outputText value="Descrição:" />
                    <h:inputText value="#{estadoController.estado.sigla}" maxlength="2" />
                    <p:commandButton action="#{estadoController.gravar}" value="Gravar" update="edicao" />
                    <p:commandButton action="#{estadoController.cancelar}" value="Cancelar" update="edicao" />
                </h:panelGrid>
            </h:form>
        </h:body>
    </f:view>
</html>

Desde já agradeço

7 Respostas

otaviojava

Faz anotação ao seu bean

@ManagedBean
@SessionScoped
EstadoController
tebosoftware

Obrigado pela resposta

Eu fiz o teste mas não mudou nada, pois eu já acessava o controller através do faces-config.xml.

falow

tebosoftware

Ninguém passou por este problema? se este framework é problematico tem algum melhor?

H

Cara, eu não acho que o Primefaces seja problemático, pode ser que ele seja novo. Eu estou trabalhando em um projeto grande e na última semana migrei tudo que eu tinha do RichFaces para o Primefaces.

Vi que no Prime os componentes são bem mais simples de se utilizar além de deixar o código das páginas xhtml bem mais legível.
Acho que é questão de gosto. Vi que o fórum do primefaces é muito bem organizado, mas também vi muitas perguntas sem resposta lá.

A minha migração se deu em especial pela necessidade de melhor em alguns componentes e utilização do JSF 2.0 com o EL, permitindo a passagem de parâmetros para métodos do meu Managed Bean.

Em relação ao seu problema, vi que vc está inserindo todo o seu código dentro de um <f:view>, na minha aplicação removi todos eles durante a migração e está funcionando tudo ok, talvez seja algo que você deva considerar para resolver o problema.
:wink:

tebosoftware

Depois de muito procurar descobri que estava fazendo caquinha…

no web.xml, esquici de colocar

&lt;servlet&gt; &lt;servlet-name&gt;Resource Servlet&lt;/servlet-name&gt; &lt;servlet-class&gt;org.primefaces.resource.ResourceServlet&lt;/servlet-class&gt; &lt;/servlet&gt; &lt;servlet-mapping&gt; &lt;servlet-name&gt;Resource Servlet&lt;/servlet-name&gt; &lt;url-pattern&gt;/primefaces_resource/*&lt;/url-pattern&gt; &lt;/servlet-mapping&gt;

e no .xhtml esqueci de colocar o

&lt;p:resources /&gt;

obrigado pela ajuda e eu vou testar também tirar o f:view

um abraço

H

Só lembrando.
Se você estiver utilizando JSF 2.0 como Primefaces 2.2RC2 não é necessário declarar nenhuma referência do Primefaces no Web.xml.

De acordo com o Getting Started do site, você só precisa declarar a seguinte linha no início de seus xhtml para usar o prime:

xmlns:p="http://primefaces.prime.com.tr/ui"

E é claro, seu código deve conter a h:head e h:body não é necessário usar o p:resources.

PS: Em relação ao <f:view> ele deve ser utilizado nas páginas sim. Em especial quando vc tiver problemas nos navegadores Safari e Chrome, quando vc não utiliza os componentes do prime dentro desse f:view, eles podem não funcionar corretamente nesses navegadores.

tebosoftware

Obrigado vou tentar.

um abraço

Criado 23 de janeiro de 2011
Ultima resposta 27 de jan. de 2011
Respostas 7
Participantes 3