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…
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..");
}
}
[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 ??