Estou com um problema no meu relatório que é o seguinte: meu field no ireport esta do tipo string só que na minha aplicação ele é Enum, ai quando executa a aplicação da um erro:
Caused by: java.lang.ClassCastException:
br.com.mcinfo.rep.modelo.enumeracoes.EnumUnidadeFederativa cannot be
cast to java.lang.String
Como posso fazer para no ireport criar um tipo Enum.
Cara vc precisa apontar para o pacote onde fica a classe enum ao invés de apontar para java.util.String. Eu acho, não tenho certeza, que enum esta no mesmo pacote so que se chama enumeration. java.util.enumeration.
Tenta ai e se der erro mande novamente.
R
rodrigo.fai
matheus306:
Cara vc precisa apontar para o pacote onde fica a classe enum ao invés de apontar para java.util.String. Eu acho, não tenho certeza, que enum esta no mesmo pacote so que se chama enumeration. java.util.enumeration.
Tenta ai e se der erro mande novamente.
kra… não sei qual vesão do iReport que vc usa mas, a que eu estou usando não tem como apontar p/ o pacote do enumeration! Somente p/ os pacotes pre-definidos…
M
matheus306
Quando vc declara um field ele te da aquelas opções, mas, aquelas não são as únicas. Você pode declarar um caminho ali. Ex: na versão 2.02 ele não lista java.util.list. Toda vez eu declaro na mão!
Veja lá!
R
rodrigo.fai
matheus306:
Quando vc declara um field ele te da aquelas opções, mas, aquelas não são as únicas. Você pode declarar um caminho ali. Ex: na versão 2.02 ele não lista java.util.list. Toda vez eu declaro na mão!
Veja lá!
blz! ate da p/ declarar um campo com este pacote “java.util.Enumeration” mas… quando adiciono um “campo texto” p/ exibicao do valor, ele nao me deixa definir com este pacote! a nao ser que eu defina como “java.lang.Number”!? será que da certo?
M
matheus306
segure o field e arrates para a sua tela. Repare que ele vai criar um campo do tipo string e vai colocar assim “”+$F{enum}
D
djemacao
Desculpa gente, posso nunca ter visto esse caso, mas porque usaria List, Enum se os campos são para exibir geralmente um único valor?
Qual seria a real aplicação de um campo ter um objeto List?
Abraços
M
matheus306
bom cara! na verdade, se eu entendi a sua pergunta, um campo nunca é do tipo list. Vc geralmente passa uma lista de objeto para o irport e declara os atributos dos objetos q contem na lista ex:
Classe pessoa.
public class Pessoa{
protected Integer id;
protected String nome;
protected String rg;
geter´s e seter´s
}
vc passa uma lista de pessoa e no ireport declara os campos de pessoa. Ex: Filed > String > nome. Assim se vc mandar 500 pessoas em uma lista, ele vai imprimir o nome 500 vezes.
Entendeu?
R
rodrigo.fai
agora sim! deu certo eu criar o field do tipo Enumeration e o text field correspondente, porem… ao executar o relatorio eh exibida a seguinte msm de erro:
Error evaluating expression : Source text : “”+$F{corEtnia}
Caused by: java.lang.ClassCastException: br.com.faespsenar.sicp.model.TipoDeEtnia cannot be cast to java.util.Enumeration
Sendo que “TipoDeEtnia” eh uma classe enum! nao to entendeno o pq do erro!
M
matheus306
Estranho mesmo!!!
vou dar uma pesquisada aki pra te resp. Mas, as vezes vc pode passar este campo como parametro no java. E passar o valor para String.
Teria como?
R
rodrigo.fai
matheus306:
Estranho mesmo!!!
vou dar uma pesquisada aki pra te resp. Mas, as vezes vc pode passar este campo como parametro no java. E passar o valor para String.
Teria como?
intao… eu fiz uma gambiarra aqui q deu certo! eu criei um atributo @transient que captura este valor do enum(a string) e exibi no relatorio. mas nao queria deixar deste jeito! acho q ha uma maneira mais elegate de c resolver este problema!?
M
matheus306
hehehehe… Gambiarra mermo!! kkkkkkkkkk…
acho que sim…
vc tem algum método público no enum que retorne o valor?
R
rodrigo.fai
matheus306:
hehehehe… Gambiarra mermo!! kkkkkkkkkk…
acho que sim…
vc tem algum método público no enum que retorne o valor?
tenho nao! precisa ser criado?
mas como seria este metodo? nunca ouvi falar de um metodo dentro de uma classe enum, que retornasse o valor!
M
matheus306
estava olhando aqui um relatório que eu fiz que usa enum, so que, eu passo um único objeto, como se fosse a ficha de uma única pessoa, então eu passo como parametro e recebo uma string no ireport. No seu caso vc passa uma lista com vários registros ne?
outra coisa, ao inves de apontar para enumeration, como eu tinha te falado antes, coloca o field para apontar para a sua classe enum.
depois troca o field la na tela de “”+${filed} para ${filed}.getDescricao()
R
rodrigo.fai
isso! na verdade eh um relatorio de projetos, onde um projeto existe varios participantes! entao eu criei um relatorio com um subrelatorio(p/ exibicao dos registros dos participantes) onde passo como parametro uma lista de participantes. Eh na bean participante que tem a enum!
mas blz, vlw pelo auxilio! na verdade esse problema com os enum eh o menor problema que tenho! Surgiu um outro que estou descabelano aqui viu… rsrsrrs
um participante pode ser: produtor rural, trabalhador rural e familiar, blz? como eu filtraria esta informacao antes da exibicao do relatorio? pq p/ kda tipo de participante eh uma informacao especifica que tenho que exibir! Entao terei que criar 3 tipos de relatorios, certo? mas ficaria dificil o filtro pq eu exibo as informacoes do participante dentro de um subrelatorio! entendeu meu caso?
vlw.
M
matheus306
no seu caso vc teria que criar subs. Se eu entendi vc tem tres tipos de pessoas, cada uma tem um tipo de relatorio. Então vc cria três subs. Formata os campos e no java vc passa os parametros pra cada hum e junta os tres em um quarto que seria tipo o relatorio pai.
entendeu?
R
rodrigo.fai
matheus306:
no seu caso vc teria que criar subs. Se eu entendi vc tem tres tipos de pessoas, cada uma tem um tipo de relatorio. Então vc cria três subs. Formata os campos e no java vc passa os parametros pra cada hum e junta os tres em um quarto que seria tipo o relatorio pai.
entendeu?
saquei! soh nao entendi a parte do quarto que seria o relatorio pai… como faria?
M
matheus306
declara tres subs nele. ele so serve pra receber sub! passa os tres subs como parametro pra ele.
entendeu?
R
rodrigo.fai
matheus306:
declara tres subs nele. ele so serve pra receber sub! passa os tres subs como parametro pra ele.
entendeu?
ah tah… entendi! mas eu ja resolvi aqui com meu gerente… achamos uma maneira de simplificar este problema rsrrs, uma gambiarrinha como sempre!
mas… voltano a aquele assundo do enum, nao entendi o objetivo da declaracao dete metodo em sua classe de exemplo:
o que vai dentro do parentese e a string descrição que vc declarou
D
djemacao
Pessoal, me desculpe a entrada nesse assunto, mas pelo que percebi, e já havia concluido antes, não é necessário fazer o que estão propondo.
Estão coçando a orelha esquerda com a mão direita sem necessidade.
Os parâmetros podem passar objetos de diversos tipos, mas se for passar um list apenas para exibir uma informação, esqueça.
Acho que, para o que precisam, estão querendo usar o JRBeanCollectionDataSource, onde transmitimos um List, ArrayList e por ai vai.
Uso este objeto quando estou trabalhando com Spring e JPA ou Hibernate.
Você monta o relatório sem conexão e depois transmite as informações alimentando os Fields criados.
Pesquisem que com certeza irão aprender sobre isso e, se não quiserem perder tempo pesquisando, compre um livro, como eu fiz.
Abraços
R
rodrigo.fai
djemacao:
Pessoal, me desculpe a entrada nesse assunto, mas pelo que percebi, e já havia concluido antes, não é necessário fazer o que estão propondo.
Estão coçando a orelha esquerda com a mão direita sem necessidade.
Os parâmetros podem passar objetos de diversos tipos, mas se for passar um list apenas para exibir uma informação, esqueça.
Acho que, para o que precisam, estão querendo usar o JRBeanCollectionDataSource, onde transmitimos um List, ArrayList e por ai vai.
Uso este objeto quando estou trabalhando com Spring e JPA ou Hibernate.
Você monta o relatório sem conexão e depois transmite as informações alimentando os Fields criados.
Pesquisem que com certeza irão aprender sobre isso e, se não quiserem perder tempo pesquisando, compre um livro, como eu fiz.
Abraços
pois eh… to usando o JRBeanArrayDataSource, para um objeto do tipo List! Funcionou em um relatorio que tinha feito a algum tempo, porem, quando executo esse novo nao está sendo exibido! Parece que esta em um loop infinito! Ja debuguei o codico e esta tudo correto. O problema esta na hora da geracao, quando estao sendo executadas as consultas!
Vo tentar usar esta nova Classe que mencionou p/ ver funciona…
o que vai dentro do parentese e a string descrição que vc declarou
eai kra, blz?
Veja c vc consegue me dizer oq pode estar aconteceno...
Antes da exibicao do relatorio, eu verifico os tipos de particpantes e os separo em 3 Collections kda, certo?
No meu relatorio principal eu criei 3 subrelatorios(um p/ kda tipo de participante), onde eu passo as respectivas Collections. Até ai blz... porem, quando mando exibir o bendito relatório nao acontece nada, somente uns barulhos estranhos no HD! Eh como se estivesse em loop infinito! Ja debuguei o codico e esta tudo correto. O problema esta na hora da geracao, quando estao sendo executadas as consultas, talvez!
Aí, depois de muito tempo eh exibida a seguinte msm de erro:
25/09/2008 11:30:29 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet vraptor2 threw exception
java.lang.OutOfMemoryError: Java heap space
25/09/2008 11:30:33 org.apache.catalina.connector.CoyoteAdapter service
SEVERE: An exception or error occurred in the container during the request processing
java.lang.OutOfMemoryError: Java heap space
oq pode estar aconteceno? c puder me ajudar novamente...
Obrigado.
F
faelcavalcanti
rodrigo.fai:
matheus306:
hehehehe… Gambiarra mermo!! kkkkkkkkkk…
acho que sim…
vc tem algum método público no enum que retorne o valor?
tenho nao! precisa ser criado?
mas como seria este metodo? nunca ouvi falar de um metodo dentro de uma classe enum, que retornasse o valor!
faça este método público e use-o como se fosse uma classe ao acessar. simples, preste bastante atenção na sua sintaxe.