Fórum Ireport gerando relátorio com chekbox #422711

28/08/2012

0

bom dia,
Estou com uma grande dúvida, antes de gerar o relatório, na pagina xhtml é mostrado uma previa do que será gerado, e nesta pagina tenho um checkbox, conforme código abaixo.
Preciso gerar um relatório que tambem seja mostrado os dados salvo no banco dos checkboxs escolhidos, tentei um subreport mas não estou conseguindo fazer.


CLASSE.

public class RPPoi implements Serializable{
...

private String[] competenciasespecificas;

...
}

CONTROLLER


public class RPPoiController {
...
private Map<String, Object> competenciascomunsItens;

public RPPoiController() {
competenciascomunsItens = new LinkedHashMap<String, Object>();
competenciascomunsItens.put("Orientação para clientes", "ORIENTACAOCLIENTES");
competenciascomunsItens.put("Orientação para mudanças", "ORIENTACAOMUDANCAS");
}
...


//uma pequena parte que gera o relatório.
@SuppressWarnings( { "unchecked" })
public void executarRelatorio(ActionEvent action) throws ParseException, Exception {
List dados = new ArrayList();
Map record = null;

record = new HashMap();
...
record.put("competenciascomuns", rppoi.getCompetenciascomuns());

// adiciona o List dados
dados.add(record);

JRBeanCollectionDataSource fonteDados1 = new JRBeanCollectionDataSource(dados);
...

}

PAGINA.XTHML

<t:selectManyCheckbox style=" width: 676px;" id="competenciascomuns" layoutWidth="3"
disabled="false"
layout="lineDirection"
value="#{rppoiController.rppoi.competenciascomuns}">
<f:selectItems value="#{rppoiController.competenciascomunsItens}"/>
</t:selectManyCheckbox>
Roger Mendes

Roger Mendes

Responder

Posts

28/08/2012

Roger Mendes

bom dia,
estou com uma grande dúvida, antes de gerar o relatório, na pagina xhtml é mostrado uma previa do que será gerado, e nesta pagina tenho um checkbox, conforme código abaixo.
preciso gerar um relatório que tambem seja mostrado os dados salvo no banco dos checkboxs escolhidos, tentei um subreport mas não estou conseguindo fazer.


classe.

public class rppoi implements serializable{
...

private string[] competenciasespecificas;

...
}

controller


public class rppoicontroller {
...
private map<string, object> competenciascomunsitens;

public rppoicontroller() {
competenciascomunsitens = new linkedhashmap<string, object>();
competenciascomunsitens.put("orientação para clientes", "orientacaoclientes");
competenciascomunsitens.put("orientação para mudanças", "orientacaomudancas");
}
...


//uma pequena parte que gera o relatório.
@suppresswarnings( { "unchecked" })
public void executarrelatorio(actionevent action) throws parseexception, exception {
list dados = new arraylist();
map record = null;

record = new hashmap();
...
record.put("competenciascomuns", rppoi.getcompetenciascomuns());

// adiciona o list dados
dados.add(record);

jrbeancollectiondatasource fontedados1 = new jrbeancollectiondatasource(dados);
...

}

pagina.xthml

<t:selectmanycheckbox style=" width: 676px;" id="competenciascomuns" layoutwidth="3"
disabled="false"
layout="linedirection"
value="#{rppoicontroller.rppoi.competenciascomuns}">
<f:selectitems value="#{rppoicontroller.competenciascomunsitens}"/>
</t:selectmanycheckbox>


na classe o correto é competenciascomuns
Responder

Gostei + 0

28/08/2012

Davi Costa

Esses checkboxs são parametros para geração do seu relatório?

att Davi
Responder

Gostei + 0

28/08/2012

Roger Mendes

Davi, não entendi sua pergunta... o formulário impresso precisa emitir o conteúdo salvo no banco. conforme código acima.
Responder

Gostei + 0

29/08/2012

Davi Costa

Então, esses checkbox, não podem ser passados como parametros?

att Davi
Responder

Gostei + 0

29/08/2012

Roger Mendes

Esqueci de mencionar, estou utilizando o IREPORT, gerando relatório em pdf jasperreports, utilizando nenhuma consulta do banco no IREPORT, estou utilizando JRBeanCollectionDataSource fonteDados1 = new JRBeanCollectionDataSource(dados);.
Responder

Gostei + 0

29/08/2012

Davi Costa

Mesmo sem executar select no ireport, vc pde passar parametrs sem problemas, e ainda mais esse parametros tem vários tipos inclusive listas do java =)

att Davi
Responder

Gostei + 0

29/08/2012

Roger Mendes

Davi, coloquei parametros de list ele retorna null. o código acima mostra como estou desenvolvendo.
Responder

Gostei + 0

30/08/2012

Davi Costa

Não vi em nenhum momento nos seus fontes vc passar parametros para o jasper.
Aquele record que vc monta não é o recurso de passagem de parametros do jasper.

att Davi
Responder

Gostei + 0

30/08/2012

Roger Mendes

nos códigos acima eu resumi para mostrar a lógica que estou utilizando. segue abaixo o código completo, este exemplo é igual os exemplos que visualizei no portal devmedia.


    // executa o relatório através de um JRBeanCollectionDataSource em pdf
   public static void executarRelatorio1(String caminhoRelatorio, Map<String, Object> parametros, String nomeRel,
        JRBeanCollectionDataSource fonteDados) throws ParseException, JRException {

    FacesContext context = FacesContext.getCurrentInstance();
    HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();

    // pega o caminho do arquivo .jasper da aplicação
    InputStream reportStream = context.getExternalContext().getResourceAsStream(caminhoRelatorio);

    response.setHeader("Content-Disposition", "attachment; filename=" + nomeRel + ".pdf");
   // response.setContentType("application/download");
    response.setContentType("application/pdf");
    response.setHeader("Pragma", "no-cache");
    try {
        ServletOutputStream servletOutputStream = response.getOutputStream();

        // envia parametros para o relatório
        if (parametros == null) {
        parametros = new HashMap<String, Object>();
        }

        // envia para o navegador o PDF gerado
        JasperRunManager.runReportToPdfStream(reportStream, servletOutputStream, parametros, fonteDados);
        servletOutputStream.flush();
        servletOutputStream.close();

    } catch (JRException e) {
        e.printStackTrace();
        //throw new Exception("Um erro ocorreu quando o relatório estava sendo executado.");
    } catch (IOException e) {
        e.printStackTrace();
        //throw new JRException(ERRO_MENSAGEM_REPORT);
    } finally {
        context.responseComplete();
    }
    }
    
  
    @SuppressWarnings( { "unchecked" })
    public void executarRelatorio(ActionEvent action) throws ParseException, Exception {
    List dados = new ArrayList();
 
     
    Map record = null;
        
        record = new HashMap();
        // coloca em um Map cada um dos campos criados
        // manualmente pelo relatorio
     record.put("id",String.valueOf(rppoi.getId()));
     record.put("competenciascomuns", rppoi.getCompetenciascomuns());
     
        // adiciona o List dados
        dados.add(record);
        
    // cria uma fonte de dados para coleções
    JRBeanCollectionDataSource fonteDados1 = new JRBeanCollectionDataSource(dados);
    Map<String, Object> parametros1 = new HashMap<String, Object>();

    executarRelatorio1("/relatorios/formularioRP.jasper", parametros1,"RP Nº:"+rppoi.getId(), fonteDados1);

    }

Responder

Gostei + 0

30/08/2012

Davi Costa

Vc não setou nada nos parametros só instanciou:
Map<String, Object> parametros1 = new HashMap<String, Object>();

Oque vc precisa fazer é criar no jasper o parametro que vc quer receber (vai ter a lisat de tipos que vc pode passar) e depois no java passar esse parametro para o jasper.

No layout do seu relatório vc pode usar esse parâmetro.
Pesquisa um ouco na internet como fazer isso, qualquer dúvida só postar.

att Davi
Responder

Gostei + 0

03/09/2012

Roger Mendes

Davi, entendi como funciona agora o parâmetro conforme vc mencionou, porém este parametro1, é o titulo do projeto, quando eu enviei o código eu retirei pois estava comentando e para teste retirei, mas foi interessante vc ter me explicado, porém descobri o problema antes de chegar na etapa do emitir o relatório e veja que agora é dúvida de java, mas gostaria da sua ajuda.

    Map<String, Object> parametros1 = new HashMap<String, Object>();
    parametros1.put("PARAMETRO_TITULO_RELATORIO","RELATÓRIO DE UNIDADES");


já tentei de várias formas, mas minha array de string, private String[] competenciascomuns;, esta null, e o engraçado é que no formulário ele puxa do banco os checkbox, certinhO tudo que tinha salvo no banco e ainda fica marcado, conforme código baixo.

PAGINA.XHTML
<t:selectManyCheckbox enabledOnUserRole="true" style=" width: 676px;" id="competenciascomuns" layoutWidth="3" 
                                          disabled="false" 
                                          layout="lineDirection"
                                          value="#{rppoiController.rppoi.competenciascomuns}">
                                            <f:selectItems value="#{rppoiController.competenciascomunsItens}"/>
                                        </t:selectManyCheckbox>




@Controller("rppoiController")
@Scope("session")

public class RPPoiController {
.........
 public RPPoiController() {
        // mostrar erro por não inicializar
        
        competenciascomunsItens = new LinkedHashMap<String, Object>();
        competenciascomunsItens.put("Orientação para o negócio com foco em resultados", "ORIENTACAORESULTADOS");
        competenciascomunsItens.put("Orientação para clientes", "ORIENTACAOCLIENTES");
        competenciascomunsItens.put("Orientação para mudanças", "ORIENTACAOMUDANCAS");
}
......
}


tentei criando uma variável do tipo String[] teste;
e setei para ele enviar o dados quando clicar no botão gerar pdf, para ver quando dado ele setava ele continua null.

 <h:commandButton value="Gerar Poi's" actionListener="#{rppoiController.executarRelatorio}"> 
  <f:setPropertyActionListener target="#{rppoiController.teste}" value="#{rppoiController.rppoi.competenciascomuns}"/>
                        </h:commandButton>
Responder

Gostei + 0

03/09/2012

Davi Costa

Onde está essa passagem da sua lista no java para o relatório?

att Davi
Responder

Gostei + 0

03/09/2012

Roger Mendes

Então, eu estava passando assim record.put("competenciascomuns", rppoi.getCompetenciascomuns()); e no ireport fazendo assim.. $F, ai como vc mencinou acima tenho que criar no parametro então criei assim,..

Map<String, Object> parametros1 = new HashMap<String, Object>();
..
parametros1.put("competenciascomuns",rppoi.getCompetenciascomuns());


Mas não consigo testar pois conforme mencionei por ultimo, o array de string esta retornando null, para que eu possa converte-lo para lista e passar o parametros1 ao ireport.
Responder

Gostei + 0

03/09/2012

Davi Costa

Como no seu managed bean vc passou rppoi para a chamada do relatório?
Pq ai já está null, queria realmente ver o ponto que se perde

att Davi
Responder

Gostei + 0

03/09/2012

Davi Costa

Outra dica troca commandButton por comandLink

att Davi
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar