Não gerar Relatório com lista vazia

Olá galera, tudo certo? Bem, na minha aplicação tenho filtros para consulta, um dataTable e um relatório. Quando o usuário clica em “Imprime” o relatório é gerado correto, porém, com a datatable vazia, pois ela é CARREGADA após clicar em consultar. Então, queria que o relatório APENAS FOSSE HABILITADO quando o usuário clicasse em CONSULTAR ou fosse fazer algum filtro, caso contrário imprimisse uma mensagem: Por favor, consulte algo…
Abaixo o código:


 <table border="0" cellpadding="2" cellspacing="0" style="margin-right: 40px">
                                    <h:panelGrid columns="2" width="100%">
                                        <h:panelGrid columns="2">
                                            <tr>
                                                <td align="right">Código:</td>
                                                <td>
                                                    <p:inputMask size="6" placeHolder=""  mask="9?9999" onfocus="this.value='';" value="#{tipoMaterialJsfBean.tipoCodigo}"/>
                                                </td>
                                            </tr>
                                            <tr>
                                                <td align="right">Descrição:</td>
                                                <td>
                                                    <p:inputText size="20" style="width: 200%" onfocus="this.value='';" value="#{tipoMaterialJsfBean.tipoDescricao}"/>
                                                </td>
                                            </tr>

                                        </h:panelGrid>
                                    </h:panelGrid>
                                    <tr>
                                        <td>
                                            <p:defaultCommand target="BtnfiltraTipoMaterial" />
                                            <p:commandButton id="BtnfiltraTipoMaterial" actionListener="#{tipoMaterialJsfBean.atualizar()}" value="Consultar" update="tabela1" process="parametros" image="search"/>
                                            <treap:btnRelatorio metodo="#{tipoMaterialJsfBean.geraRelatorioTipoMaterialPDF()}"/>
                                        </td>
                                    </tr>
                                </table>

Alguém tem idéia de como eu poderia fazer ? Se alguém puder ajudar, agradeço.

Você verifica no seu bean se a lista vai retornar vazia e dá uma mensagem.

Vou testar aqui e já posto o resultado.
Vlw

Bem, fiz o seguinte no bean:

    private LazyDataModel<TipoMaterial> tipoMaterialList;


 public void geraRelatorioTipoMaterialPDF() {
        if (tipoMaterialList != null) {
            geraRelatorioTipoMaterial(true);
        } else {
            info("Por favor, faça uma consulta..");
        }
    }

    public void geraRelatorioTipoMaterial(boolean isPDF) {
        List<TipoMaterial> listaRelatorio = m.listaTipoMaterialRelatorio(montaParametros());
        if (isPDF) {
            geraRelatorioPDF(listaRelatorio, RELATORIO_TIPOMATERIAL);
        }
    }

Porém não funcionou…Pode ajudar ??

Na verdade o teste não é esse, pois seu objeto da lista existe, só está vazio, tente assim:

lic void geraRelatorioTipoMaterialPDF() {  
    if (!tipoMaterialList.isEmpty()) {  
        geraRelatorioTipoMaterial(true);  
    } else {  
        info("Por favor, faça uma consulta..");  
    }  
} 

[quote=Valeio Bezerra]Na verdade o teste não é esse, pois seu objeto da lista existe, só está vazio, tente assim:

lic void geraRelatorioTipoMaterialPDF() { if (!tipoMaterialList.isEmpty()) { geraRelatorioTipoMaterial(true); } else { info("Por favor, faça uma consulta.."); } } [/quote]
Ok, mto obrigado. Vou testar aki.

[quote=Valeio Bezerra]Na verdade o teste não é esse, pois seu objeto da lista existe, só está vazio, tente assim:

lic void geraRelatorioTipoMaterialPDF() { if (!tipoMaterialList.isEmpty()) { geraRelatorioTipoMaterial(true); } else { info("Por favor, faça uma consulta.."); } } [/quote]
Está dando problema no isEmpty(). Não sei se o problema é por se tratar de uma lista em Lazy. Saberia algo em que eu possa substituir o isEmpty por alguma coisa similar?
Estou procurando aqui…

Coloca o bean todo.

Ok. abaixo o bean de TipoMaterial sem os IMPORTS…

@ManagedBean
@ViewScoped
public class TipoMaterialJsfBean extends BaseCRUDJSFBean<TipoMaterial> {

    public static final String RELATORIO_TIPOMATERIAL = "tipomaterial";
    private static Logger log = LoggerFactory.getLogger(TipoMaterialJsfBean.class);
    @EJB
    private TipoMaterialService m;
    private LazyDataModel<TipoMaterial> tipoMaterialList;

    private String tipoCodigo;
    private String tipoDescricao;

    public void geraRelatorioTipoMaterialPDF() {
        if (tipoMaterialList != null) {
            geraRelatorioTipoMaterial(true);
        } else {
            info("Por favor, faça uma consulta..");
        }
    }

    public void geraRelatorioTipoMaterial(boolean isPDF) {
        List<TipoMaterial> listaRelatorio = m.listaTipoMaterialRelatorio(montaParametros());
        if (isPDF) {
            geraRelatorioPDF(listaRelatorio, RELATORIO_TIPOMATERIAL);
        }
    }

    public TipoMaterialJsfBean() {
    }

    @Override
    public void renovarTabela() {
        log.trace("####### Entrou em " + ReflectionUtil.m());
        filtraTipoMaterial();
    }

    public void filtraTipoMaterial() {
        tipoMaterialList = new LazyDataModel<TipoMaterial>() {

            @Override
            public List<TipoMaterial> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, String> filters) {
                return m.listaTipoMaterialPaginada(montaParametros(), first, pageSize, sortField, sortOrder);
            }
        };
        tipoMaterialList.setRowCount(m.listaTipoMaterialCount(montaParametros()));
    }

    private Map<String, Object> montaParametros() {
        Map<String, Object> p = new HashMap<String, Object>();
        p.put("tipoDescricao", tipoDescricao);
        p.put("tipoCodigo", tipoCodigo);
        return p;
    }

    public String getTipoDescricao() {
        return tipoDescricao;
    }

    public void setTipoDescricao(String tipoDescricao) {
        this.tipoDescricao = tipoDescricao;
    }

    public LazyDataModel<TipoMaterial> getTipoMaterialList() {
        return tipoMaterialList;
    }

    public void setTipoMaterialList(LazyDataModel<TipoMaterial> tipoMaterialList) {
        this.tipoMaterialList = tipoMaterialList;
    }

    public String getTipoCodigo() {
        return tipoCodigo;
    }

    public void setTipoCodigo(String tipoCodigo) {
        this.tipoCodigo = tipoCodigo;
    }
}

Mais uma vez, vlw pela ajuda… Se conseguir me ajudar a “trancar” o relatório nao sabe o quanto estará me ajudando…
Abc.

Instancie o atributo tipoMaterialList no construtor.

[quote=Valeio Bezerra]Instancie o atributo tipoMaterialList no construtor.
[/quote]
Desculpe, mas n entendi…

[quote=Valeio Bezerra]Instancie o atributo tipoMaterialList no construtor.
[/quote]
Eu não poderia colocar um disable no BOTÃO RELATÓRIO será?

public TipoMaterialJsfBean() {  
  tipoMaterialList = new LazyDataModel<TipoMaterial>();  
} 

bote isso

[quote=Valeio Bezerra] public TipoMaterialJsfBean() { tipoMaterialList = new LazyDataModel<TipoMaterial>(); }

bote isso[/quote]
OK, como é Lazy, fiz isso:


   public TipoMaterialJsfBean() {
          tipoMaterialList = new LazyDataModel<TipoMaterial>() {

            @Override
            public List<TipoMaterial> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, String> filters) {
                return m.listaTipoMaterialPaginada(montaParametros(), first, pageSize, sortField, sortOrder);
            }
        };
          
}

[quote=Valeio Bezerra] public TipoMaterialJsfBean() { tipoMaterialList = new LazyDataModel<TipoMaterial>(); }

bote isso[/quote]
No botão de Imprime relatorio no xhtml tentei colocar isso:

 disabled="#{empty tipoMaterialJsfBean.tipoMaterialList}"

Saberia me informar se tem algum outro teste que posso fazer??

agora no teste faça isso.

lic void geraRelatorioTipoMaterialPDF() {    
    if (!tipoMaterialList.isEmpty()) {    
        geraRelatorioTipoMaterial(true);    
    } else {    
        info("Por favor, faça uma consulta..");    
    }    
}  

Assim:

[quote=Valeio Bezerra]agora no teste faça isso.

lic void geraRelatorioTipoMaterialPDF() { if (!tipoMaterialList.isEmpty()) { geraRelatorioTipoMaterial(true); } else { info("Por favor, faça uma consulta.."); } } [/quote]
Ok, já fiz esse teste, porém no IsEmpty() dá o seguinte erro: cannot find symbol…
Abaixo o código do bean:


  public void geraRelatorioTipoMaterialPDF() {
        if (!tipoMaterialList.isEmpty()) {
            geraRelatorioTipoMaterial(true);
        } else {
            info("Por favor, faça uma consulta..");
        }
    }

    public void geraRelatorioTipoMaterial(boolean isPDF) {
        List<TipoMaterial> listaRelatorio = m.listaTipoMaterialRelatorio(montaParametros());
        if (isPDF) {
            geraRelatorioPDF(listaRelatorio, RELATORIO_TIPOMATERIAL);
        }
    }

    public TipoMaterialJsfBean() {
        tipoMaterialList = new LazyDataModel<TipoMaterial>() {

            @Override
            public List<TipoMaterial> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, String> filters) {
                return m.listaTipoMaterialPaginada(montaParametros(), first, pageSize, sortField, sortOrder);
            }
        };
    }

Vixe, o pior que uso List, achei que ia dá no mesmo rs

Bem, só se eu usar o List, mas sei não hein, pq nas listas pequenas até lá vai, mas tenho umas ae que vai ficar meio dia pra carregar dae…
Alguma idéia ??