Struts 2 X Jasper Melhor pratica criando tela JSP para chamar jasper?

Olá,

vi um exemplo onde struts 2 chama automaticamente através do struts.xml o jasper ( que contem JavaBen)
achei dez.

Minha duvida que tenho onde fiz Jasper através do iReport (usando sql) pois varios join com tabelas e se fosse

usar JavaBen (teria que criar TO para compor os dados de minha tabela) .

Minha duvida :

  • Posso como fiz usando SQL no Ireport (arquivo gerado jasper) chamar dessa maneira pois como vou
    configurar o xml abaixo pois não vou preencher o javaben e sim ter uma conexão pra executar sql e mostrar o pdf ???

  • outra duvida como fiz com sql como ficaria tendo uma tela jsp solicitando os parametros para o relatório e chmar
    esse relatorio jasper e jogando na tela como pdf ??? não vi nenhum exemplo assim ???

se alguém puder me ajudar

agradeceria

abs




<struts>
	 <include file="struts-default.xml" />  
	 <include file="jasperreports-default.xml" />
	<package name="jasper"   extends="jasperreports-default, struts-default"  >
	    <action name="myJasperTestPDF"  class="br.com.devmedia.actions.JasperAction">
	        <result name="success" type="jasper">
	            <param name="location">reports/listProducts.jasper</param>
	            <param name="dataSource">myList</param>
	            <param name="format">PDF</param>
	        </result>
	    
        </action>
    </package>
</struts>

mais um dia sem solução ainda

só pq vc está executando o sql dentro de teu jasper naum quer dizer q vc nuam possa chamar ele dessa forma que especificou!

sobre a segunda duvida naum entendi!! vc tem dados no jsp que vai influenciar dos dados do pdf? se for isso vc tem que fazer o óbvio que é mudar oq está mal feito:

  • tirar o sql do jasper
  • mudar o jasper para receber todos os dados do struts2

e como faço pra passar um parametro conforme abaixo :

Minha duvida pois estou acostumado a fazer o sql noireport e passar paramentro via class java
antes de chamar o jasper …e queria aprender como fazer isso via class bean definida no ireport e conseguir passar parametro
isso que ainda não visualizei como fazer ???



import java.util.List;

import br.com.devmedia.dao.FakeDAO;
import br.com.devmedia.domain.Product;

import com.opensymphony.xwork2.ActionSupport;


public class JasperAction extends ActionSupport {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private List<Product> myList;
	
	public String execute() {
		FakeDAO fk = new FakeDAO();
		myList = fk.getList();
		return "success";
	}
	public List<Product> getMyList() {
	  return myList;
	}
}

---

import java.util.ArrayList;
import java.util.List;

import br.com.devmedia.domain.Product;

public class FakeDAO {
	private List<Product> myList;
	
	public List<Product> getList(){
		myList = new ArrayList<Product>();
		myList.add(new Product(1,"Arroz","Basico",60.0,40.0,"fardo"));
		myList.add(new Product(2,"Feijão","Basico",50.0,30.0,"fardo"));
		myList.add(new Product(3,"Sal","Tipo 1",6.0,3.0,"fardo"));
		myList.add(new Product(4,"Macarrão","Tipo Leve",25.0,15.0,"cx"));
		return myList;
	}
}
----------


//org.springframework.web.context.ContextLoaderListener
public class Product {
	private int id;
	private String name;
	private String type;
	private double priceSales;
	private double priceCost;
	private String unit;
	public Product( int id,	String name,String type,double priceSales,double priceCost,	String unit){
		this.id = id;
		this.name = name;
		this.type = type;
		this.priceSales = priceSales;
		this.priceCost = priceCost;
		this.unit = unit;
	}
	public int getId() {
		return id;
---
<struts>
	 <include file="struts-default.xml" />  
	 <include file="jasperreports-default.xml" />
	<package name="jasper"   extends="jasperreports-default, struts-default"  >
	    <action name="myJasperTestPDF"  class="br.com.devmedia.actions.JasperAction">
	        <result name="success" type="jasper">
	            <param name="location">reports/listProducts.jasper</param>
	            <param name="dataSource">myList</param>
	            <param name="format">PDF</param>
	        </result>
	    
        </action>
    </package>
</struts>
----
como usei no iReport
Agora, vamos iniciar a criação de um
relatório e também iremos aprender como
fazer sua integração ao ambiente da nossa
aplicação de exemplo.
Usando o iReport, crie um relatório novo,
chamado listProducts. Salve-o no diretório
reports/products na estrutura de pastas
web da aplicação, em seguida vá ao menu
Options>ClassPath, e como na Figura 3, adicione
usando o botão Add folder o caminho
de seu diretório de build de classes. Feito
isso, salve essa configuração clicando no
botão Save Classpath.
Agora vá ao menu Data>Report Query e,
como apresentado na Figura 4, selecione a
aba JavaBean Data Source, informe no campo
class name o pacote completo e o nome
de classe Product. Em seguida, clique no
botão Read attributes. Veja que será listado
os atributos da classe, logo após, selecione
esses atributos, clique no botão Add selected
field(s) e finalize essa operação clicando
no botão Ok.
Feito isso, você tem uma lista de campos
no iReport, conforme os atributos da classe
Product, mas como o foco desse artigo não é
ensinar o básico de iReport, apenas sugiro
que monte os campos e rótulos conforme
exibido na Figura 5.
Após concluir a criação do relatório, vá
ao menu Options>Settings, na aba compiler,
e habilite o item Use Reports Directory to
Compile. Dessa forma, quando o relatório
for compilado, o arquivo .jasper ficará
no mesmo diretório do arquivo fonte
com a extensão .jrxml, que no caso é o
reports>product de nossa aplicação web.
Feito essa configuração, compile o mesmo,
clicando no menu Build>Compile.