
>> Mais documentação do Visual Web Pack
Gerando relatórios e PDFs de um aplicativo da Web
Contribuição de Chris Kutler e Craig McClanahan
| Janeiro de 2007 [Número da revisão: V1-1] |
|
|
Quando você precisa gerar um relatório, um gráfico ou um arquivo PDF de um aplicativo da Web, há diversos produtos de terceiros que podem ajudar a realizar a tarefa, inclusive a estrutura de código aberto JasperReports. JasperReports é uma ferramenta de relatório que produz relatórios nos formatos HTML, PDF, XLS, CSV e XML. Este tutorial mostra como integrar a estrutura JasperReports a um aplicativo da Web que você constrói usando o NetBeans Visual Web Pack.
Neste tutorial, você cria um aplicativo da Web que exibe e imprime informações de um banco de dados de viagem. O aplicativo da Web permite que você visualize um relatório de viagem no formato HTML ou PDF. |
Conteúdo
|
|
 |
Componentes JavaServer Faces/ Plataforma Java EE |
1.2 com Java EE 5* 1.1 com J2EE 1.4
|
| Banco de dados Viagem |
Necessário |
| Biblioteca de componentes BluePrints Ajax |
Não é necessário |
* Na data da publicação deste tutorial, somente o servidor de aplicativos Sun Java System oferecia suporte ao Java EE 5.
install_pt_BR.html">Notas de versão.
Criando uma biblioteca de JasperReports
Antes de começar a construir o projeto, use o Gerenciador de biblioteca do IDE para tornar a biblioteca de relatórios Java do JasperReports facilmente disponível para qualquer projeto.
-
Faça o download de jasperreports-1.3.0-project.zip de http://www.jasperforge.org e extraia os arquivos. É necessário registrar-se com JasperForge antes de poder fazer o download do arquivo zip.
Observação: Os exemplos neste tutorial usam o JasperReports 1.3.0 e os arquivos JAR associados que são fornecidos com esta versão. Se usar uma versão diferente, os nomes da biblioteca JAR e os números de versão irão variar. Além disso, a lista de bibliotecas JAR a serem adicionadas pode diferir.
- No IDE, escolha Ferramentas > Gerenciador de bibliotecas no menu principal.
- Clique em Nova biblioteca, digite
JasperReports130 na caixa de texto Nome da biblioteca e clique em OK.
- Clique em Adicionar JAR/Pasta e navegue até o diretório no qual você extraiu os arquivos de
jasperreports-1.3.0-project.zip.
- Navegue até o diretório
dist, selecione jasperreports-1.3.0.jar e pressione Enter.
- Clique novamente em Adicionar JAR/Pasta e navegue até o diretório
../lib (vá um diretório acima e abaixo no diretório lib).
-
Use Ctrl-Clique para selecionar os arquivos JAR abaixo e pressione Enter. Se estiver usando uma versão diferente da 1.3.0, consulte o site de JasperForge para identificar os arquivos JAR a serem selecionados.
commons-beanutils-1.7.jar
commons-collections-2.1.jar
commons-digester-1.7.jar
commons-logging-1.0.2.jar
itext-1.3.1.jar
Estas são as bibliotecas mínimas necessárias para um aplicativo da Web que usa a estrutura JasperReports. Talvez seja necessário adicionar bibliotecas adicionais para usar recursos mais avançados. Por exemplo, se você estiver usando o recurso de sub-relatórios, será necessário adicionar commons-javaflow-20060411.jar.
-
Verifique se você adicionou as seis bibliotecas, como mostrado na figura abaixo.
Figura 1: Janela Gerenciador de bibliotecas mostrando a biblioteca do JasperReports130Figura 1: |
- Para tornar o Javadoc do JavaReports disponível para o editor de Java, clique na guia Javadoc, clique em Adicionar ZIP/Pasta, navegue até o diretório no qual você extraiu os arquivos de
jasperreports-1.3.0-project.zip, selecione o subdiretório dist/javadoc e pressione Enter.
- (Opcional) Se desejar entrar nas classes do JasperReport durante a sessão de depuração, clique na guia Fontes, clique em Adicionar JAR/Pasta, navegue até o diretório no qual você extraiu os arquivos de
jasperreports-1.3.0-project.zip, selecione o subdiretório src e pressione Enter.
- Clique em OK para fechar o Gerenciador de bibliotecas.
Configurando o ambiente de edição JRXML
Você escreve os modelos do JavaReport no formato XML. Para que o editor do IDE possa reconhecer um arquivo XML do JavaReport (JRXML) como um arquivo XML, use a caixa de diálogo Opções para adicionar jrxml à propriedade Extensões e tipos MIME para o objeto XML, como mostrado na figura abaixo.
Figura 2: Associando um arquivo JRXML a objetos XML |
- Escolha Ferramentas > Opções para abrir a caixa de diálogo Opções.
- Clique em Opções avançadas.
- Expanda Configuração do IDE, expanda Sistema, expanda Tipos de objetos e selecione Objetos XML (não Esquemas XML).
- Clique no botão de reticências (...) para a propriedade
Extensões e tipos MIME abrir o editor de personalização.
- Digite
jrxml na caixa de texto Item e clique em Adicionar.
- Clique em OK e feche a caixa de diálogo Opções.
Criando o projeto
Complete as etapas abaixo para criar e configurar o projeto.
- Na janela Tempo de execução, expanda o nó Bancos de dados.
-
Clique com o botão direito do mouse no nó jdbc para o banco de dados Viagem e escolha Conectar no menu pop-up.
Se o banco de dados Viagem não estiver disponível, consulte a seção Informações de configuração nas Instruções de instalação do NetBeans Visual Web Pack para obter informações.
- Se a caixa de diálogo Conectar for exibida, digite
viagem como Senha e selecione Lembrar senha durante esta sessão.
- No menu principal do IDE, escolha Arquivo > Novo projeto.
- No assistente para Novo projeto, selecione Web na lista Categorias e selecione Visual Web Application na lista Projetos.
- Clique em Próximo.
- Nomeie o projeto
TravelReport.
-
Selecione o servidor desejado e a versão Java EE, e clique em Concluir.
O projeto aparece com a página inicial (Page1) aberta no Visual Designer.
Observe que, se você usar um servidor que não seja o servidor de aplicativos Sun Java System, será necessário tornar o driver do banco de dados disponível para o servidor. Consulte a seção Configuração de projeto do Visual Web no Guia de instalação para obter mais informações.
- Na janela Projetos, clique com o botão direito do mouse em TravelReport > Bibliotecas e escolha Adicionar biblioteca.
-
Na janela Adicionar biblioteca, selecione JasperReports130, como mostrado na figura abaixo, e clique em Adicionar biblioteca.
Figura 3: Adicionando a biblioteca JasperReports126 |
Configurando os recursos de relatório
Nesta seção, você adiciona um diretório de imagens e colocar o logotipo da empresa neste diretório. Em seguida, adiciona um modelo JRXML para o relatório de viagem e modifica o arquivo de construção do projeto para compilar o modelo JRXML em um modelo de relatório binário Jasper.
O modelo JRXML gera um relatório semelhante ao mostrado na figura abaixo.
Figura 4: Relatório de viagem |
- Na janela Projetos, expanda Páginas da Web.
- Clique com o botão direito do mouse no nó de recursos e escolha Novo > Pasta.
- Digite
Nome e pressione Enter.
-
Clique com o botão direito do mouse na imagem a seguir e use o comando do navegador para salvar a imagem no disco rígido. Salve a imagem na pasta caminho-para-o-projeto-da-Web/TravelReport/web/resosurces/images.
Figura 5: Logotipo da companhia |
- Clique no cabeçalho Arquivos, que aparece ao lado do cabeçalho Projetos, para visualizar a janela Arquivos.
- Na janela Arquivos, expanda TravelReport.
- Clique com o botão direito do mouse no nó src e escolha Novo > Pasta.
- Digite
relatórios na caixa de texto Nome da pasta.
- Assegure-se de que Pasta pai esteja definida como
src e pressione Enter.
- Na janela Arquivos, clique com o botão direito do mouse em TravelReport e selecione Propriedades.
- No painel Categorias, selecione Fontes.
- Clique no botão Adicionar pasta que aparece à direita da lista Pastas de pacote de fontes.
- Navegue até a pasta src, selecione relatórios e clique em Abrir.
-
Na caixa de texto Rótulo para a linha src/relatórios, altere o valor para Definições de JasperReports e pressione Enter.
Se não pressionar Enter, o IDE não salvará as alterações.
- Clique em OK.
-
Clique no cabeçalho Projetos e observe o novo nó Definição de JasperReports, que tem um subnó <pacote padrão>.
Na etapa seguinte, você coloca uma definição de relatório neste pacote padrão. Posteriormente, você irá modificar o script de construção para compilar as definições de relatório nesta pasta na pasta build/web/WEB-INF/reports, que é onde o código de tempo de execução em ApplicationBean1 espera encontrá-las.
- Clique com o botão direito do mouse no nó Definição de JasperReports e escolha Novo > Arquivo/Pasta.
- Expanda o nó Outro no painel Categorias, selecione Arquivo de propriedades no painel Tipos de arquivos e clique em Próximo.
- Digite
TripReportByPerson.jrxml na caixa de texto Nome do arquivo e pressione Enter. O novo arquivo abre-se no editor de XML.
-
Copie as marcas XML abaixo e cole-as no arquivo XML vazio.
| Amostra de código 1: Modelo JasperReport TripReportByPerson.jrxml |
<?xml version="1.0"?>
<!DOCTYPE jasperReport
PUBLIC "-//JasperReports//DTD Report Design//EN"
"http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">
<jasperReport name="TripReportByPerson">
<style name="Arial_Normal" isDefault="true" fontName="Arial" fontSize="12"
isBold="false" isItalic="false" isUnderline="false" isStrikeThrough="false"
pdfFontName="Helvetica" pdfEncoding="Cp1252" isPdfEmbedded="false"/>
<style name="Arial_Bold" fontName="Arial" isDefault="false" isBold="true"
pdfFontName="Helvetica-Bold"/>
<style name="Arial_Header1" fontName="Arial" isDefault="false" fontSize="22"
isBold="true" pdfFontName="Helvetica-Bold"/>
<style name="Arial_Bold_White" fontName="Arial" forecolor="white"
isDefault="false" fontSize="12" isBold="true" pdfFontName="Helvetica-Bold"/>
<parameter name="LogoURL" class="java.net.URL"/>
<field name="NAME" class="java.lang.String"/>
<field name="TRIPID" class="java.lang.Integer"/>
<field name="DEPDATE" class="java.util.Date"/>
<field name="DEPCITY" class="java.lang.String"/>
<field name="DESTCITY" class="java.lang.String"/>
<field name="DESCRIPTION" class="java.lang.String"/>
<group name="PersonGroup" minHeightToStartNewPage="84">
<groupExpression>
<![CDATA[$F{NAME}]]>
</groupExpression>
<groupHeader>
<band height="64">
<textField>
<reportElement style="Arial_Bold" mode="Opaque" x="0" y="24"
width="550" height="15" backcolor="#e0e0e0" />
<textFieldExpression class="java.lang.String">
<![CDATA["Scheduled Trips for " + $F{NAME}]]>
</textFieldExpression>
</textField>
<line>
<reportElement x="0" y="39" width="550" height="1" />
<graphicElement />
</line>
<frame>
<reportElement x="0" y="40" width="550" height="20"
mode="Opaque" backcolor="lightGray"/>
<staticText>
<reportElement style="Arial_Bold_White" x="20" y="2" width="130" height="15" />
<text><![CDATA[Departure Date]]></text>
</staticText>
<staticText>
<reportElement style="Arial_Bold_White" x="150" y="2" width="130" height="15" />
<text><![CDATA[Departure City]]></text>
</staticText>
<staticText>
<reportElement style="Arial_Bold_White" x="280" y="2" width="130" height="15" />
<text><![CDATA[Destination City]]></text>
</staticText>
<staticText>
<reportElement style="Arial_Bold_White" x="410" y="2" width="130" height="15" />
<textElement textAlignment="Left" />
<text><![CDATA[Purpose]]></text>
</staticText>
</frame>
</band>
</groupHeader>
</group>
<pageHeader>
<band height="94">
<image>
<reportElement x="0" y="0" width="441" height="60"/>
<graphicElement />
<imageExpression class="java.net.URL">
<![CDATA[$P{LogoURL}]]>
</imageExpression>
</image>
<line>
<reportElement x="0" y="60" width="550" height="1"/>
<graphicElement />
</line>
<staticText>
<reportElement style="Arial_Header1" x="0" y="60" width="445" height="30" />
<text><![CDATA[Trip Report by Employee]]></text>
</staticText>
</band>
</pageHeader>
<detail>
<band height="20">
<textField pattern="dd/MM/yyyy">
<reportElement x="20" y="0" width="100" height="20"/>
<textFieldExpression class="java.util.Date">
<![CDATA[$F{DEPDATE}]]>
</textFieldExpression>
</textField>
<textField isBlankWhenNull="true">
<reportElement x="150" y="0" width="100" height="20"/>
<textFieldExpression class="java.lang.String">
<![CDATA[$F{DEPCITY}]]>
</textFieldExpression>
</textField>
<textField isBlankWhenNull="true">
<reportElement x="280" y="0" width="100" height="20"/>
<textFieldExpression class="java.lang.String">
<![CDATA[$F{DESTCITY}]]>
</textFieldExpression>
</textField>
<textField isBlankWhenNull="true">
<reportElement x="410" y="0" width="100" height="20"/>
<textFieldExpression class="java.lang.String">
<![CDATA[$F{DESCRIPTION}]]>
</textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
|
- Feche e salve o arquivo.
- Na janela Arquivos, expanda TravelReport e clique duas vezes em build.xml para abri-lo na área de edição.
-
Adicione o script abaixo antes da marca </project>.
O script substitui o destino de -pós-compilação, que o IDE chama após compilar as fontes de Java. O script de destino compila qualquer arquivo JRXML encontrado na pasta src/relatórios e coloca o arquivo compilado na pasta build/WEB-INF/reports.
Amostra de código 2: build.xml Script de compilação de relatório |
<!-- Personalize a seguinte propriedade para apontar para a pasta
em que você desempacotou a versão do JasperReports -->
<property name="jrc.home"
value="JasperReports-Install-Dir/jasperreports-1.3.0"/>
<!-- Defina a classpath usada para a compilação do relatório -->
<path id="jrc.classpath">
<fileset dir="${jrc.home}/dist"
includes="*.jar"/>
<fileset dir="${jrc.home}/lib"
includes="*.jar"/>
</path>
<!-- Defina a tarefa Ant personalizada que compila definições de relatório -->
<taskdef name="jrc"
classname="net.sf.jasperreports.ant.JRAntCompileTask">
<classpath refid="jrc.classpath"/>
</taskdef>
<!-- Defina o destino que irá compilar relatórios, depois que a compilação
estiver concluída -->
<target name="-post-compile"
description="Compile todas as definições de JasperReports">
<!-- Crie primeiro o diretório de saída -->
<mkdir dir="${build.web.dir}/WEB-INF/reports"/>
<!-- Compile a definição de relatório -->
<jrc srcdir="src/reports"
destdir="${build.web.dir}/WEB-INF/reports">
<classpath
refid="jrc.classpath"/>
<include
name="*.jrxml"/>
</jrc>
<!-- Omita as fontes da definição de relatório de webapp -->
<delete>
<fileset dir="${build.web.dir}/WEB-INF/classes"
includes="*.jrxml"/>
</delete>
</target>
|
- Modifique o valor da propriedade jrc.home para apontar para a pasta na qual você desempacotou o arquivo zip do JasperReports.
- Feche e salve o arquivo.
- Escolha Construir > Construir projeto principal para invocar o script
build.xml.
-
Na janela Arquivos, expanda Construir > Web > WEB-INF > relatórios e verifique se o IDE gerou o binário TripReportByPerson.jasper.
Se vir erros de construção na janela Saída, ou se o binário não foi criado, verifique se você definiu corretamente a propriedade jrc.home no arquivo build.xml.
Mapeando o ImageServlet do JasperReports
A estrutura JasperReports inclui um servlet denominado ImageServlet para exibir imagens em relatórios HTML gerados. Mesmo que você inclua imagens no relatório, é necessário adicionar um mapeamento para este servlet, porque JasparReports usa imagens em branco para espaçamento.
Complete as etapas seguintes para mapear o URI de imagem para ImageServlet. Você usará o URI de imagem mais tarde, quando adicionar código para exportar o relatório para HTML.
-
Na janela Arquivos, expanda Web > WEB-INF e clique duas vezes no nó web.xml para abri-lo no editor de XML.
Certifique-se de editar o arquivo web.xml em Web > WEB-INF, e não o arquivo em Construir > Web > WEB-INF. Se editar o web.xml em Construir > Web > WEB-INF, você perderá as alterações na próxima vez que construir o projeto.
- Na barra de ferramentas de edição, clique em Servlets para abrir o editor de Servlet.
-
No editor de Servlet, clique em Adicionar elemento de servlet.
A caixa de diálogo Adicionar servlet é exibida, como mostrado na figura abaixo.
Figura 6: Caixa de diálogo Adicionar sevlet |
-
Na caixa de diálogo Adicionar servlet, digite os valores abaixo e clique em OK.
| Caixa de texto |
Valor |
| Nome do servlet |
ImageServlet |
| Classe do servlet |
net.sf.jasperreports.j2ee.servlets.ImageServlet |
| Padrões de URL |
/image |
-
Feche web.xml e salve as alterações.
Agora o aplicativo sabe que, ao receber uma solicitação endereçada a image, deve enviar a solicitação para a instância ImageServlet.
Adicionando a lógica de geração de relatório
Use estas etapas para adicionar lógica ao Bean do aplicativo para gerar o relatório.
- Na janela Projetos, clique duas vezes no nó Bean do aplicativo para abrir ApplicationBean1.java na área de edição.
-
Adicione o código abaixo ao final do arquivo, antes da última chave final.
| Amostra de código 3: Código de geração de relatório |
/**
* <p>Prefixo do nome do recurso para relatórios compilados.</p>
*/
private static final String PREFIX = "/WEB-INF/reports/";
/**
* <p>Sufixo do nome do recurso para relatórios compilados.</p>
*/
private static final String SUFFIX = ".jasper";
/**
* <p>Tipos de conteúdo válidos para relatórios que podemos produzir.</p>
*/
private static final String[] VALID_TYPES =
{ "text/html", // Standard HTML representation
"application/pdf", // Adobe Portable Document Format
};
/**
* <p>Gerar o relatório especificado, no formato de saída
* especificado, baseado nos dados especificados.</p>
*
* nome do @param do nome do relatório a ser renderizado
* tipo de @param do tipo de conteúdo do relatório solicitado ("application/pdf"
* or "text/html")
* dados do @param <code>ResultSet</code> contendo
* os dados do relatório
*
* @exception IllegalArgumentException se o tipo de conteúdo
* especificado não for reconhecido
* @exception IllegalArgumentException se nenhuma definição do relatório compilado
* para o nome especificado puder ser encontrada
*/
public void jasperReport(String name, String type,
ResultSet data) {
jasperReport(name, type, data, new HashMap());
}
/**
* <p>Gerar o relatório especificado, no formato de saída
* especificado, baseado nos dados especificados.</p>
*
* nome @param do nome do relatório a ser renderizado
* tipo de @param do tipo de conteúdo do relatório solicitado ("application/pdf"
* or "text/html")
* dados de @param <code>ResultSet</code> contendo os dados para relatar
* params @param de <code>Map</code> de parâmetros
* de relatório adicionais
*
* @exception IllegalArgumentException se o tipo de conteúdo
* especificado não for reconhecido
* @exception IllegalArgumentException se nenhuma definição do relatório compilado
* para o nome especificado puder ser encontrada
*/
public void jasperReport(String name, String type,
ResultSet data, Map params) {
// Validar que reconhecemos o tipo de relatório
// antes de perder tempo potencialmente preenchendo
// o relatório com dados
boolean found = false;
for (int i = 0; i < VALID_TYPES.length; i++) {
if (VALID_TYPES[i].equals(type)) {
found = true;
break;
}
}
if (!found) {
throw new IllegalArgumentException("Invalid report type '"
+ type
+ "' requested");
}
// Procurar recurso de design de relatório compilado
ExternalContext econtext = getExternalContext();
InputStream stream = econtext.getResourceAsStream(PREFIX + name
+ SUFFIX);
if (stream == null) {
throw new IllegalArgumentException("Unknown report name '"
+ name
+ "' requested");
}
try {
data.beforeFirst();
} catch (Exception e) {
throw new FacesException(e);
}
// Preencha o relatório solicitado com os dados especificados
JRResultSetDataSource ds = new JRResultSetDataSource(data);
JasperPrint jasperPrint = null;
try {
jasperPrint = JasperFillManager.fillReport(
stream, params, ds);
} catch (RuntimeException e) {
throw e;
} catch (Exception e) {
throw new FacesException(e);
} finally {
try {
stream.close();
} catch (IOException e) {
;
}
}
// Configurar o exportador a ser usado, junto com os parâmetros
// personalizados específicos do tipo de exportador
JRExporter exporter = null;
HttpServletResponse response = (HttpServletResponse)
econtext.getResponse();
FacesContext fcontext = FacesContext.getCurrentInstance();
try {
response.setContentType(type);
if ("application/pdf".equals(type)) {
exporter = new JRPdfExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT,
jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM,
response.getOutputStream());
} else if ("text/html".equals(type)) {
exporter = new JRHtmlExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT,
jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_WRITER,
response.getWriter());
// Tornar imagens disponíveis para a saída HTML
HttpServletRequest request =
(HttpServletRequest)
fcontext.getExternalContext().getRequest();
request.getSession().setAttribute(
ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE,
jasperPrint);
exporter.setParameter(
JRHtmlExporterParameter.IMAGES_MAP, new HashMap());
// A seguinte instrução requer mapeamento / imagem
// para o imageServlet no web.xml.
//
// Este servlet serve imagens, incluindo imagens px
// para espaçamento.
//
// Sirva as imagens diretamente para não
// incorrermos em tempo extra associado a
// a uma solicitação JSF para uma entidade não-JSF.
exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI,
request.getContextPath() + "/image?image=");
}
} catch (RuntimeException e) {
throw e;
} catch (Exception e) {
throw new FacesException(e);
}
// Basta de preliminares ...
// exportar o relatório
try {
exporter.exportReport();
} catch (RuntimeException e) {
throw e;
} catch (Exception e) {
throw new FacesException(e);
}
// Dizer a JavaServer Faces que nenhuma saída é necessária
fcontext.responseComplete();
}
|
- Clique com o botão direito do mouse no código-fonte e escolha Fixar importações no menu pop-up. Na caixa de diálogo Corrigir importações, verifique se
java.io.InputStream aparece no campo Nome totalmente qualificado para a classe InputStream e se java.sql.ResultSet aparece no campo Nome totalmente qualificado para a classe ResultSet.
- Clique em OK.
- Feche e salve o arquivo.
Criando a consulta do banco de dados
Neste aplicativo, você usa o mesmo conjunto de resultados de consulta do banco de dados para as informações de viagem serem exibidas na página da Web e no relatório gerado. Você o Editor de consultas para desenhar a consulta do banco de dados, como mostrado na figura abaixo.
Figura 7: Configurações do Editor de consultas para o Conjunto de resultados de viagem |
- Na área de edição, clique na guia Page1 para exibir a página no Visual Designer.
- Na janela Tempo de execução, expanda Banco de dados, expanda o nó jdbc do banco de dados Viagem e expanda o nó Tabelas.
- Arraste o nó TRIP e solte-o em um local em branco na página.
- Na janela Esboço, expanda SessionBean1 e clique duas vezes em tripRowSet para abrir o Editor de consultas.
- Na tabela TRIP no painel superior, desmarque as caixas de seleção para PERSONID, TRIPTYPEID e LASTUPDATED.
- Arraste o nó PESSOA da janela Servidores e solte-o ao lado da tabela TRIP no painel superior.
- Na tabela PESSOA, desmarque as caixas de seleção para PERSONID, JOBTITLE, FREQUENTFLYER e LASTUPDATED.
- Arraste o nó TRIPTYPE da janela Servidores e solte-o ao lado da tabela PESSOA no painel superior.
- Na tabela TRIPTYPE, desmarque as caixas de seleção para TRIPTYPE, NAME e LASTUPDATED.
-
Na linha NAME da tabela TRAVEL.PERSON no painel de grade, escolha Crescente na lista suspensa na coluna Tipo de classificação.
O IDE define a Ordem de classificação como 1.
-
Na linha DEPDATE da tabela TRAVEL.TRIP no painel de grade, escolha Crescente na lista suspensa na coluna Tipo de classificação.
O IDE define a Ordem de classificação como 2.
- Feche o Editor de consultas para tripRowSet.
Criando a página do relatório de viagem
Nesta seção você adiciona uma tabela à Page1 para exibir os dados de viagem e adiciona botões para gerar o relatório nos formatos HTML e PDF, como mostrado na figura abaixo.
Figura 8: Page1 |
- Exiba Page1 no Visual Designer.
- Arraste um componente Tabela da Paleta e solte-o na página.
- Clique com o botão direito do mouse no componente Tabela e escolha Layout da tabela no menu pop-up.
- Na caixa de diálogo Layout da tabela, escolha tripDataProvider na lista suspensa Obter dados de.
- Selecione PERSON.NAME na lista Selecionado e clique no botão para cima repetidamente até PERSON.NAME mover-se para o alto da lista.
- Clique na guia Opções.
- Digite
Trips na caixa de texto Título.
- Selecione Ativar paginação.
- Clique em OK para fechar a caixa de diálogo.
- Coloque um componente Botão acima do componente Tabela, digite
View Report e pressione Enter.
- Na janela Propriedades, defina a propriedade
id como viewReportBtn.
- Clique no botão de reticências (...) para a propriedade
action, selecione viewReportBtn_action na lista suspensa e clique em OK.
- Coloque um componente Botão ao lado botão Exibir relatório, digite
Create PDF e pressione Enter.
- Na janela Propriedades, defina a propriedade
id como createPdfBtn.
- Clique no botão de reticências (...) para a propriedade
action, selecione createPdfBtn_action na lista suspensa e clique em OK.
- Clique duas vezes no botão Exibir relatório para exibir a fonte de Java para o método
viewReportBtn_action.
-
Adicione o código abaixo mostrado em negrito ao corpo do método viewReportBtn_action.
Amostra de código 4: Método viewReportBtn_action |
public String viewReportBtn_action() {
// Liberar os recursos de rowset
tripDataProvider.close();
Map fillParams = new HashMap();
// A instrução acima gerar avisos com Java SE 1.5
// Para eliminar os avisos, substitua-a pela
// seguinte instrução:
// Map<String, URL> fillParams =
// new HashMap<String, URL.>>();
try {
fillParams.put
("LogoURL",
getExternalContext().getResource("/resources/images/logo.gif"));
getApplicationBean1().jasperReport
("TripReportByPerson", "text/html",
getSessionBean1().getTripRowSet(), fillParams);
} catch (Exception e) {
log("Exception generating report", e);
error("Exception generating report: " + e);
}
return null;
}
|
-
Efetue rolagem até o método createPdfBtn_action e adicione o código que aparece abaixo em negrito.
Amostra de código 5: Método createPdfBtn_action |
public String createPdfButton_action() {
// Liberar os recursos de rowset
tripDataProvider.close();
Map fillParams = new HashMap();
try {
fillParams.put
("LogoURL",
getExternalContext().getResource("/resources/images/logo.gif"));
getApplicationBean1().jasperReport
("TripReportByPerson", "application/pdf",
getSessionBean1().getTripRowSet(), fillParams);
} catch (Exception e) {
log("Exception generating report", e);
error("Exception generating report: " + e);
}
return null;
}
|
- Clique com o botão direito do mouse no código-fonte e escolha Fixar importações no menu pop-up.
- Na barra de ferramentas principal, clique em Executar projeto principal para construir, implantar e executar o aplicativo da Web.
-
No aplicativo da Web, clique em Exibir relatório para visualizar o relatório no formato HTML.
Se vir imagens quebradas, abra Web > WEB-INF > web.xml e certifique-se de que a entrada para ImageServlet existe. Às vezes, o IDE não salva entradas recém-adicionadas.
- Clique no botão Voltar e clique em Criar PDF para visualizar o relatório no formato PDF.
Resumo
As etapas principais para usar a estrutura JasperReports do projeto NetBeans Visual Web Pack são as seguintes:
- Fazer o download e descompactar a estrutura JasperReports a partir de http://www.jasperforge.org.
- Usar o Gerenciador de bibliotecas para criar uma biblioteca JasperReports. Isso facilita adicionar os arquivos JAR necessários de JasperReports a um aplicativo da Web.
- Para adicionar a biblioteca JasperReports a um aplicativo da Web, clique com o botão direito do mouse no nó Biblioteca e escolha Adicionar biblioteca.
- Usar as propriedade
Extensões e tipos MIME para Objetos XML na caixa de diálogo Opções e adicionar jrxml à lista de objetos XML. Ao fazê-lo, o IDE abrirá arquivos jrxml no editor de XML.
- Adicionar um mapeamento a
net.sf.jasperreports.j2ee.servlets.ImageServlet no arquivo web.xml.
- Adicionar lógica ao Bean do aplicativo para gerar os relatórios.
- Após criar o relatório, chamar
facesContext.responseComplete( ) para encerrar o atual ciclo de solicitações.
- Se você estiver gerando um relatório HTML, use o parâmetro
IMAGES_URI para passar o URI para a classe ImageServlet. Por exemplo, se você definir o URI como /image, defina o parâmetro IMAGES_URI como request.getContextPath() + "/image?image=".
- Você pode usar um conjunto de linhas em cache, como o conjunto de linhas em cache que o IDE cria quando você adiciona um provedor de dados a uma página, como uma fonte de dados para preencher o relatório. Certifique-se de chamar o método
close do provedor de dados antes de preencher o relatório.
Consulte também:
Esta página foi modificada pela última vez em 26 de fevereiro de 2007
|
|