Boa tarde, faz muito tempo mas muito tempo mesmo que não uso o jasper reports, baixei a nova versão e estou tentando montar um relatório só pra pegar a prática de novo, fiz como sempre faço porém estou tendo um erro que não sei resolver e já tentei as soluções da net e nada.
Como de costume, montei a query e coloquei um campo no detail, peguei o jrxml, joguei no eclipse e fiz as chamadas. ao executar tenho o seguinte erro:
Caused by: net.sf.jasperreports.engine.JRException: Error retrieving field value from bean: Titulo.
at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getBeanProperty(JRAbstractBeanDataSource.java:132)
at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getFieldValue(JRAbstractBeanDataSource.java:97)
at net.sf.jasperreports.engine.data.JRBeanCollectionDataSource.getFieldValue(JRBeanCollectionDataSource.java:108)
at net.sf.jasperreports.engine.fill.JRFillDataset.setOldValues(JRFillDataset.java:1373)
at net.sf.jasperreports.engine.fill.JRFillDataset.next(JRFillDataset.java:1274)
at net.sf.jasperreports.engine.fill.JRFillDataset.next(JRFillDataset.java:1250)
at net.sf.jasperreports.engine.fill.JRBaseFiller.next(JRBaseFiller.java:1010)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:117)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:558)
at net.sf.jasperreports.engine.fill.BaseReportFiller.fill(BaseReportFiller.java:414)
at net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:122)
at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:667)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:983)
at br.ind.risc.follow.rel.NegAtraso.imprimir(NegAtraso.java:37)
at br.ind.risc.follow.controller.MainController.geraRel(MainController.java:26)
... 58 more
Caused by: java.lang.NoSuchMethodException: Unknown property 'Titulo' on class 'class br.ind.risc.follow.model.BusinessPojo'
at org.apache.commons.beanutils.PropertyUtilsBean.getSimpleProperty(PropertyUtilsBean.java:1277)
at org.apache.commons.beanutils.PropertyUtilsBean.getNestedProperty(PropertyUtilsBean.java:808)
at org.apache.commons.beanutils.PropertyUtilsBean.getProperty(PropertyUtilsBean.java:884)
at org.apache.commons.beanutils.PropertyUtils.getProperty(PropertyUtils.java:464)
at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getBeanProperty(JRAbstractBeanDataSource.java:112)
... 72 more
e a classe que chama o relatório:
public class NegAtraso {
private String path;
private String pathToReportPackage; // Caminho para o package onde estão
public NegAtraso() {
this.path = this.getClass().getClassLoader().getResource("").getPath();
this.pathToReportPackage = this.path + "br/ind/risc/follow/rel/jrxml/";
// System.out.println(path);
}
public void imprimir() throws IOException, JRException{
BusinessDAODB businessDAODB = new BusinessDAODB();
List<BusinessPojo> negocios;
negocios = businessDAODB.negAtraso();
JasperReport report = JasperCompileManager.compileReport(this.getPathToReportPackage() + "negAtraso.jrxml");
JasperPrint print = JasperFillManager.fillReport(report, null, new JRBeanCollectionDataSource(negocios));
JasperExportManager.exportReportToPdfFile(print, "C:/Teste/teste.pdf");
}
public String getPathToReportPackage() {
return this.pathToReportPackage;
}
public String getPath() {
return this.path;
}
}
Usei o Maven para baixar o Jars para não pegar nenhuma lib desatualizada.
Grato pela ajuda.
Provavelmente a classe br.ind.risc.follow.model.BusinessPojo não possua um atributo com o nome ‘Titulo’, nem mesmo um método getTitulo
que justifique esperar o mesmo no jrxml, não?
Quando você vai utilizar beans como data sources, você precisa ter certeza que o nome do atributo definido em cada field é, efetivamente, o mesmo nome do atributo no objeto que vai ser passado para preencher os dados a serem exibidos no relatório.
Obrigado pela resposta, esse atributo existe sim, vou postar o fonte completo da classe.
public class BusinessPojo {
private IntegerProperty id = new SimpleIntegerProperty();
private StringProperty titulo = new SimpleStringProperty();
private IntegerProperty userId = new SimpleIntegerProperty();
private StringProperty responsavel = new SimpleStringProperty();
private StringProperty prodId = new SimpleStringProperty();
private StringProperty produtoDesc = new SimpleStringProperty();
private IntegerProperty costuId = new SimpleIntegerProperty();
private StringProperty empresa = new SimpleStringProperty();
private DoubleProperty valNeg = new SimpleDoubleProperty();
private ObjectProperty<LocalDate> dtInicio = new SimpleObjectProperty<>();
private ObjectProperty<LocalDate> dtFim = new SimpleObjectProperty<>();
private StringProperty descricao = new SimpleStringProperty();
private StringProperty status = new SimpleStringProperty();
private StringProperty etapas = new SimpleStringProperty();
public int getId() {
return id.get();
}
public void setId(int id) {
this.id.set(id);
}
public String getTitulo(){
return titulo.get();
}
public void setTitulo(String titulo){
this.titulo.set(titulo);
}
public int getUserId(){
return userId.get();
}
public void setUserId(int userId){
this.userId.set(userId);
}
public String getResponsavel(){
return responsavel.get();
}
public void setResponsavel(String responsavel){
this.responsavel.set(responsavel);
}
public String getProdId(){
return prodId.get();
}
public void setProdId(String prodId){
this.prodId.set(prodId);
}
public String getProdutoDesc(){
return produtoDesc.get();
}
public void setProdutoDesc(String produto){
this.produtoDesc.set(produto);
}
public int getCostuId(){
return costuId.get();
}
public void setCostuId(int costuId){
this.costuId.set(costuId);
}
public String getEmpresa(){
return empresa.get();
}
public void setEmpresa(String empresa){
this.empresa.set(empresa);
}
public Double getValNeg(){
return valNeg.get();
}
public void setValNeg(Double valNeg){
this.valNeg.set(valNeg);
}
public LocalDate getDtInicio(){
return dtInicio.get();
}
public void setDtInicio(LocalDate dtInicio){
this.dtInicio.set(dtInicio);
}
public LocalDate getDtFim(){
return dtFim.get();
}
public void setDtFim(LocalDate dtFim){
this.dtFim.set(dtFim);
}
public String getDescricao(){
return descricao.get();
}
public void setDescricao(String descricao){
this.descricao.set(descricao);
}
public String getStatus(){
return status.get();
}
public void setStatus(String status){
this.status.set(status);
}
public String getEtapas(){
return etapas.get();
}
public void setEtapas(String etapas){
this.etapas.set(etapas);
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((costuId == null) ? 0 : costuId.hashCode());
result = prime * result + ((descricao == null) ? 0 : descricao.hashCode());
result = prime * result + ((dtFim == null) ? 0 : dtFim.hashCode());
result = prime * result + ((dtInicio == null) ? 0 : dtInicio.hashCode());
result = prime * result + ((empresa == null) ? 0 : empresa.hashCode());
result = prime * result + ((etapas == null) ? 0 : etapas.hashCode());
result = prime * result + ((id == null) ? 0 : id.hashCode());
result = prime * result + ((prodId == null) ? 0 : prodId.hashCode());
result = prime * result + ((produtoDesc == null) ? 0 : produtoDesc.hashCode());
result = prime * result + ((responsavel == null) ? 0 : responsavel.hashCode());
result = prime * result + ((status == null) ? 0 : status.hashCode());
result = prime * result + ((titulo == null) ? 0 : titulo.hashCode());
result = prime * result + ((userId == null) ? 0 : userId.hashCode());
result = prime * result + ((valNeg == null) ? 0 : valNeg.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
BusinessPojo other = (BusinessPojo) obj;
if (costuId == null) {
if (other.costuId != null)
return false;
} else if (!costuId.equals(other.costuId))
return false;
if (descricao == null) {
if (other.descricao != null)
return false;
} else if (!descricao.equals(other.descricao))
return false;
if (dtFim == null) {
if (other.dtFim != null)
return false;
} else if (!dtFim.equals(other.dtFim))
return false;
if (dtInicio == null) {
if (other.dtInicio != null)
return false;
} else if (!dtInicio.equals(other.dtInicio))
return false;
if (empresa == null) {
if (other.empresa != null)
return false;
} else if (!empresa.equals(other.empresa))
return false;
if (etapas == null) {
if (other.etapas != null)
return false;
} else if (!etapas.equals(other.etapas))
return false;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
if (prodId == null) {
if (other.prodId != null)
return false;
} else if (!prodId.equals(other.prodId))
return false;
if (produtoDesc == null) {
if (other.produtoDesc != null)
return false;
} else if (!produtoDesc.equals(other.produtoDesc))
return false;
if (responsavel == null) {
if (other.responsavel != null)
return false;
} else if (!responsavel.equals(other.responsavel))
return false;
if (status == null) {
if (other.status != null)
return false;
} else if (!status.equals(other.status))
return false;
if (titulo == null) {
if (other.titulo != null)
return false;
} else if (!titulo.equals(other.titulo))
return false;
if (userId == null) {
if (other.userId != null)
return false;
} else if (!userId.equals(other.userId))
return false;
if (valNeg == null) {
if (other.valNeg != null)
return false;
} else if (!valNeg.equals(other.valNeg))
return false;
return true;
}
@Override
public String toString() {
return descricao.getValue();
}
public IntegerProperty idProperty() {
return id;
}
public IntegerProperty userIdProperty() {
return userId;
}
public StringProperty prodIdProperty() {
return prodId;
}
public IntegerProperty costuIdProperty() {
return costuId;
}
public StringProperty tituloProperty() {
return titulo;
}
public StringProperty produtoDescProperty() {
return produtoDesc;
}
public StringProperty responsavelProperty() {
return responsavel;
}
public StringProperty empresaProperty() {
return empresa;
}
public DoubleProperty valNegProperty() {
return valNeg;
}
public ObjectProperty dtInicioProperty() {
return dtInicio;
}
public ObjectProperty dtFimProperty() {
return dtFim;
}
public StringProperty descricaoProperty() {
return descricao;
}
public StringProperty statusProperty() {
return status;
}
public StringProperty etapasProperty() {
return etapas;
}
}
Veja bem, você possui uma propriedade chamada titulo
, com t
minúsculo.
O que o erro diz é Caused by: java.lang.NoSuchMethodException: Unknown property 'Titulo' on class 'class br.ind.risc.follow.model.BusinessPojo'
, ou seja, ele espera uma propriedade com T
maiúsculo.
Eu troquei a propriedade e mesmo assim o erro persiste.
Posta o jrxml do relatório em questão.
Segue
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.3.1.final using JasperReports Library version 6.3.1 -->
<!-- 2017-03-07T16:48:20 -->
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="teste" pageWidth="842" pageHeight="595" orientation="Landscape" columnWidth="802" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="0000a3d2-ef45-4e04-b23a-2a93d4174efa">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="SQL SERVER"/>
<property name="com.jaspersoft.studio.data.sql.tables" value=""/>
<queryString>
<![CDATA[SELECT b.Titulo
FROM Business b]]>
</queryString>
<field name="Titulo" class="java.lang.String"/>
<background>
<band splitType="Stretch"/>
</background>
<title>
<band height="79" splitType="Stretch"/>
</title>
<pageHeader>
<band height="35" splitType="Stretch"/>
</pageHeader>
<columnHeader>
<band height="61" splitType="Stretch">
<staticText>
<reportElement x="42" y="0" width="100" height="30" uuid="6e3f9e68-8012-4174-8f19-145a556b8a88"/>
<text><![CDATA[Titulo]]></text>
</staticText>
</band>
</columnHeader>
<detail>
<band height="125" splitType="Stretch">
<textField>
<reportElement x="42" y="6" width="100" height="30" uuid="15d7d9d9-a30a-4027-a091-0961d24790a1"/>
<textFieldExpression><![CDATA[$F{Titulo}]]></textFieldExpression>
</textField>
</band>
</detail>
<columnFooter>
<band height="45" splitType="Stretch"/>
</columnFooter>
<pageFooter>
<band height="54" splitType="Stretch"/>
</pageFooter>
<summary>
<band height="42" splitType="Stretch"/>
</summary>
</jasperReport>
O nome do field deveria ser titulo
com “t” minúsculo
Se eu troco o nome, ele não compila e ao executar
Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1774)
at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1657)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Node.fireEvent(Node.java:8413)
at javafx.scene.control.Button.fire(Button.java:185)
at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:182)
at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:96)
at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:89)
at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Scene$MouseHandler.process(Scene.java:3757)
at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485)
at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762)
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:381)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$354(GlassViewEventHandler.java:417)
at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:416)
at com.sun.glass.ui.View.handleMouseEvent(View.java:555)
at com.sun.glass.ui.View.notifyMouse(View.java:937)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71)
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275)
at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1771)
... 48 more
Caused by: net.sf.jasperreports.engine.design.JRValidationException: Report design not valid :
1. Field not found : Titulo
at net.sf.jasperreports.engine.design.JRAbstractCompiler.verifyDesign(JRAbstractCompiler.java:289)
at net.sf.jasperreports.engine.design.JRAbstractCompiler.compileReport(JRAbstractCompiler.java:161)
at net.sf.jasperreports.engine.JasperCompileManager.compile(JasperCompileManager.java:357)
at net.sf.jasperreports.engine.JasperCompileManager.compile(JasperCompileManager.java:290)
at net.sf.jasperreports.engine.JasperCompileManager.compileReport(JasperCompileManager.java:575)
at br.ind.risc.follow.rel.NegAtraso.imprimir(NegAtraso.java:37)
at br.ind.risc.follow.controller.MainController.geraRel(MainController.java:26)
... 58 more
Nada como alterar a query, agora resolveu, bastou apenas renomear a coluna…
Valeu pela ajuda.