Exibir Relatório Web

Bom dia a todos!!

Eu criei um RelatorioVendas.jasper, ele foi criado com JasperStudio, ele está pronto, já está com a query, já está compilado, tudo certinho.

Após criar o relatório e compila-lo, coloquei ele dentro do projeto:

Agora eu gostaria, se possível, que alguém me orientasse (passo a passo) o que devo fazer

quais classes tenho que criar? quais arquivos tenho que criar? Onde colocar estes arquivos…e assim por diante…

Grato a todos que puderem ajudar.

Opa. Teve um outro post que vc tinha criado que estava com o código correto para gerar o relatório. Ele não funcionou mais?

@Lucas_Camara

Na verdade eu tinha até esquecido daquele post, mas vamos por partes

eu criei esta classe, lembra dela?

package br.com.fjsistemas.relatorios;

import java.io.InputStream;
import java.util.List;

import org.springframework.stereotype.Component;

import br.com.fjsistemas.backend.Venda;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;

@Component
public class GerarRelatorioVenda {

	public byte[] gerarRelatorioVendas(List<Venda> lista) throws JRException { 
		
		//referencia ao arquivo, carregar no objeto
		InputStream fonte = GerarRelatorioVenda.class.getResourceAsStream("/report/RelatorioVendas.jrxml");
		
		//Declarando objeto do tipo JasperReports
		JasperReport report = JasperCompileManager.compileReport(fonte);
		
		//preenchendo o relatorio 1º parametro relatorio compilado, 2º null pois não havera imagens no logo, 3º passando a lista transformando-a em um datasource informando qual fonte de dados
		//o relatorio vai pegar as informações
		JasperPrint print = JasperFillManager.fillReport(report, null, new JRBeanCollectionDataSource(lista));
		
		//exibir
		byte[] relatorio = JasperExportManager.exportReportToPdf(print);
		
		return relatorio;
		
	}
}  

este código que vc me passou(lembra dele, que vc pegou no site vaadin)

Button downloadButton = new Button("Gerar relatório");

StreamResource myResource = createResource();
FileDownloader fileDownloader = new FileDownloader(myResource);
fileDownloader.extend(downloadButton);
private StreamResource createResource() {
	return new StreamResource(new StreamSource() { // aqui vc pode simplificar com lambda: () -> {}
		@Override
		public InputStream getStream() {
			List<Venda> vendas = vendaRepository.findAll();
			byte[] relatorio = gerarRelatorioVenda.gerarRelatorioVendas(vendas);
			
			try {
				ByteArrayOutputStream baos = new ByteArrayOutputStream(relatorio.length);
				baos.write(relatorio, 0, relatorio.length);
				
				return new ByteArrayInputStream(baos.toByteArray());
			} catch (IOException e) {
				e.printStackTrace();
				return null;
			}
        }, "relatorioVendas.pdf");
    }
}

então, ele não funciona mais, na verdade comigo nunca funcionou, mas não é que o código esteja errado, ele está certo, porem este código é do Vaadin 8 e eu uso o Vaadin 14.

Fui pesquisar e eu rodei o site do Vaadin atrás de informações, mas para o Vaadin 14 não encontrei nada praticamente

Achei um exemplo para o vaadin 14: https://vaadin.com/forum/thread/17909506/17910246. Porém, parece que o exemplo usa um link em vez de um botão.