Como converter uma String para Double em JasperReports?

63 respostas
jaspermysqlfront-endjavaprogramação
R

Bom dia a todos!

Tenho o seguinte gráfico:

Neste gráfico preciso exibir a porcentagem correspondente de cada venda ao valor total do relatório.

Exemplo:

Então para isso basta criar um variável dentro do próprio relatório, que faça a divisão da variável que recebe o valor da compra, pela variável que recebe o valor total do relatório e o resultado gerado seja multiplicado por 100

O meu problema é o seguinte, a variável que recebe o valor de cada venda é uma String: $F{valor_total_venda}

e a variável que recebe o valor total do relatório é Double $V{SOMA}:

Já pesquisei aos montes alguma forma de conversão, e encontrei varias coisas, mas nada funcionou, alguém poderia me orientar em como fazer isso?

63 Respostas

Lucas_Camara

Tu pode tentar fazer algo assim dentro da expressão onde o valor será usado:

Double.valueOf($F{valor_total_venda})
R

R

tbm tentei isso:

new Double($F{valor_total_venda}.doubleValue() / $V{SOMA})

mas recebo isso:

R

e isso tbm:

new Double(Double.parseDouble($F{valor_total_venda}.doubleValue() / $V{SOMA}))

R

e por fim isso:

new Double(Double.parseDouble($F{valor_total_venda} / $V{SOMA}))

Lucas_Camara

Tente usar BigDecimal dessa forma para ver se vai:

new BigDecimal($F{valor_total_venda}).divide(new BigDecimal($V{SOMA}))

$V{SOMA} é de que tipo?

R

Soma é do tipo Double

R

Lucas_Camara

To achando que vai ser preciso converter de volta pra string após o cálculo. Tente adicionar um toString no final para ver se pelo menos muda o erro:

new BigDecimal($F{valor_total_venda}).divide(new BigDecimal($V{SOMA})).toString()
R

nada meu amigo…

Lucas_Camara

Veja se há algum outro log com o detalhe do erro. Deve ter em algum lugar algum texto explicando se foi um erro de sintaxe ou se está faltando algo. Essa mensagem que está aparecendo está muito vaga.

Manda um print do lugar onde vc está editando a expressão.

R

Passo a Passo:

1º Clico em Percentage - ao lado direito

2º Coloco a pecentage ao lado do grafico, e abre-se esta janela:

3º Clico em Finish

4º clico 2x sobre a expressao

e abre-se a janela:

5º nesta janela coloco a sua exporessao:

e clico em finish

6º clico em preview e recebo o erro(que por sinal agora é outro erro)

Lucas_Camara

Tente assim:

String.valueOf(new BigDecimal($F{valor_total_venda}).divide(new BigDecimal($V{SOMA}), RoundingMode.DOWN))
R

Lucas_Camara

Se vc clicar na aba inferior Text (um pouco mais abaixo do erro), vc conseguirá ver o detalhes da exceção. Vc pode copiar o texto da exceção e postar aqui.

R
net.sf.jasperreports.engine.JRException: net.sf.jasperreports.engine.fill.JRExpressionEvalException: Error evaluating expression for source text: String.valueOf(new BigDecimal($F{valor_total_venda}).divide(new BigDecimal($V{SOMA}), RoundingMode.DOWN))
	at com.jaspersoft.studio.editor.preview.view.control.ReportController.fillReport(ReportController.java:551)
	at com.jaspersoft.studio.editor.preview.view.control.ReportController.access$18(ReportController.java:526)
	at com.jaspersoft.studio.editor.preview.view.control.ReportController$1.run(ReportController.java:444)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)
Caused by: net.sf.jasperreports.engine.fill.JRExpressionEvalException: Error evaluating expression for source text: String.valueOf(new BigDecimal($F{valor_total_venda}).divide(new BigDecimal($V{SOMA}), RoundingMode.DOWN))
	at net.sf.jasperreports.engine.fill.JREvaluator.handleEvaluationException(JREvaluator.java:294)
	at net.sf.jasperreports.engine.fill.JREvaluator.evaluate(JREvaluator.java:328)
	at net.sf.jasperreports.engine.fill.JRCalculator.evaluate(JRCalculator.java:673)
	at net.sf.jasperreports.engine.fill.JRCalculator.evaluate(JRCalculator.java:641)
	at net.sf.jasperreports.engine.fill.JRFillElement.evaluateExpression(JRFillElement.java:1173)
	at net.sf.jasperreports.engine.fill.JRFillTextField.evaluateText(JRFillTextField.java:555)
	at net.sf.jasperreports.engine.fill.JRFillTextField.resolveElement(JRFillTextField.java:1056)
	at net.sf.jasperreports.engine.fill.JRFillElement.performDelayedEvaluation(JRFillElement.java:1140)
	at net.sf.jasperreports.engine.fill.JRFillElement.delayedEvaluate(JRFillElement.java:1479)
	at net.sf.jasperreports.engine.fill.JRFillElement.resolveElement(JRFillElement.java:1239)
	at net.sf.jasperreports.engine.fill.ElementEvaluationAction.execute(ElementEvaluationAction.java:69)
	at net.sf.jasperreports.engine.fill.DelayedFillActions.runActions(DelayedFillActions.java:271)
	at net.sf.jasperreports.engine.fill.BaseReportFiller.resolveBoundElements(BaseReportFiller.java:807)
	at net.sf.jasperreports.engine.fill.JRBaseFiller.resolveReportBoundElements(JRBaseFiller.java:1209)
	at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillSummary(JRVerticalFiller.java:1238)
	at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportEnd(JRVerticalFiller.java:308)
	at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:126)
	at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:622)
	at net.sf.jasperreports.engine.fill.BaseFillHandle$ReportFill.run(BaseFillHandle.java:135)
	at java.base/java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NumberFormatException: Character R is neither a decimal digit number, decimal point, nor "e" notation exponential mark.
	at java.base/java.math.BigDecimal.<init>(Unknown Source)
	at java.base/java.math.BigDecimal.<init>(Unknown Source)
	at java.base/java.math.BigDecimal.<init>(Unknown Source)
	at Simple_Blue_1626195830545_269357.evaluate(Simple_Blue_1626195830545_269357:113)
	at net.sf.jasperreports.engine.fill.JREvaluator.evaluate(JREvaluator.java:313)
	... 18 more
Lucas_Camara

Eita, deve tah sendo retornado algum número inválido, ou no valor_total_venda ou na SOMA. Será que vc não está retornando um R$ no valor não?

Por exemplo, ao tentar fazer isso:

new BigDecimal("R$200.00");

o erro que estoura é exatamente esse:

Exception in thread "main" java.lang.NumberFormatException: Character R is neither a decimal digit number, decimal point, nor "e" notation exponential mark.
R

Na linha 113 do xml:

<textElement verticalAlignment="Middle">

Na linha 313:

<textField textAdjust="StretchHeight" pattern="R$ #,##0.###;#,##0.###-">

R

não sei te responder

Lucas_Camara

Coloca para imprimir no relatório (pode ser em qualquer lugar) os itens: $F{valor_total_venda} e $V{SOMA} e veja se o valor retornado é um número válido.

R

R

ESQUERDA VALOR TOTAL A DIR SOMA

Lucas_Camara

Então o $F{valor_total_venda} está com o valor R$21.111,03? Se for, vc teria que deixar ele com o valor 21111.03 para poder resolver esse erro: Character R is neither a decimal digit number, decimal point, nor “e” notation exponential mark

R

Então terei que usar um String format?

Lucas_Camara

Pois eh, acho que não deveria, pq esse valor total já deveria está com o valor correto. De onde vc está recuperando esse valor total?

R

Direto do banco

Lucas_Camara

no FIELD, tem alguma configuração de pattern para formatar o valor?

R


Lucas_Camara

Essas props são do TextField que usa um Field. Mas parece que não tem como mesmo usar uma formatação num field diretamente.

Só pra tu entender. No jasper:

  • $F{} isso é um FIELD (usados para obter dados de consultas, por exemplo)
  • $P{} isso é um PARAMETER (usados de forma independente para receber dados externos)
  • $V{} isso é uma VARIABLE (geralmente, usados para algum controle interno)

Manda ai o jrxml pra gente dá uma olhada.

R
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.17.0.final using JasperReports Library version 6.17.0-6d93193241dd8cc42629e188b94f9e0bc5722efd  -->
<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="Simple_Blue" pageWidth="595" pageHeight="842" columnWidth="535" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="1c336336-3a8f-4f3f-9925-25a4295aa183">
	<property name="com.jaspersoft.studio.data.sql.tables">
		<![CDATA[ZmpzaXN0ZW1hcy52ZW5kYSAsMzA0LDQxNywzOTE4MDE5ZC00MjdhLTQ4ZTYtOTFhYS03MDZlZDQ1
YjNkYjY7ZmpzaXN0ZW1hcy5wcm9kdXRvX3ZlbmRpZG8gLDEyMiw1ODUsNzJjZTc5MzktNjQ2Ni00
OWRhLTk0MzMtNTcyNzQwZmQ3ZTBlO2Zqc2lzdGVtYXMuY2xpZW50ZSAsMTIyLDE1LDZjMzZmNDQ0
LTcwOTEtNGMxZS1hOGE2LTc2MGExMTA0NWFlYjtmanNpc3RlbWFzLnByb2R1dG8gLDE1LDU4NSxm
ODYxNzJhNy0yNjUyLTQ1NGYtYmMxNS00YzNhNjJkM2NlNzI7ZmpzaXN0ZW1hcy5mb3JtYV9kZV9w
YWdhbWVudG8gLDEyMiw0NDMsNjVhNzMzZDMtMWEzMy00NGU3LWFmYWUtZjcxMmJlODVhN2YwOw==]]>
	</property>
	<property name="com.jaspersoft.studio.data.defaultdataadapter" value="fsistemas"/>
	<property name="net.sf.jasperreports.chart.pie.ignore.duplicated.key" value="true"/>
	<parameter name="idsVendasSelecionadas" class="java.util.Set"/>
	<queryString language="SQL">
		<![CDATA[SELECT fjsistemas.cliente.nome,
	fjsistemas.forma_de_pagamento.forma_de_pagamento,
	fjsistemas.produto.valor,
	fjsistemas.produto.nome,
	fjsistemas.produto_vendido.produto_id,
	fjsistemas.produto_vendido.valor_total_do_item,
	fjsistemas.produto_vendido.quantidade,
	fjsistemas.venda.id,
	fjsistemas.venda.data_venda,
	fjsistemas.venda.valor_total_venda
FROM fjsistemas.venda
	INNER JOIN fjsistemas.cliente ON 
	 fjsistemas.cliente.id = fjsistemas.venda.cliente_id 
	INNER JOIN fjsistemas.forma_de_pagamento ON 
	 fjsistemas.forma_de_pagamento.id = fjsistemas.venda.forma_de_pagamento_id 
	INNER JOIN fjsistemas.produto_vendido ON 
	 fjsistemas.produto_vendido.venda_id = fjsistemas.venda.id 
	INNER JOIN fjsistemas.produto ON 
	 fjsistemas.produto.id = fjsistemas.produto_vendido.produto_id 
WHERE 
	 $X{IN,fjsistemas.venda.id,idsVendasSelecionadas} 
ORDER BY fjsistemas.venda.id ASC]]>
	</queryString>
	<field name="nome" class="java.lang.String">
		<property name="com.jaspersoft.studio.field.name" value="nome"/>
		<property name="com.jaspersoft.studio.field.label" value="nome"/>
		<property name="com.jaspersoft.studio.field.tree.path" value="cliente"/>
		<fieldDescription><![CDATA[]]></fieldDescription>
	</field>
	<field name="forma_de_pagamento" class="java.lang.String">
		<property name="com.jaspersoft.studio.field.name" value="forma_de_pagamento"/>
		<property name="com.jaspersoft.studio.field.label" value="forma_de_pagamento"/>
		<property name="com.jaspersoft.studio.field.tree.path" value="forma_de_pagamento"/>
		<fieldDescription><![CDATA[]]></fieldDescription>
	</field>
	<field name="valor" class="java.lang.Double">
		<property name="com.jaspersoft.studio.field.name" value="valor"/>
		<property name="com.jaspersoft.studio.field.label" value="valor"/>
		<property name="com.jaspersoft.studio.field.tree.path" value="produto"/>
		<fieldDescription><![CDATA[]]></fieldDescription>
	</field>
	<field name="COLUMN_4" class="java.lang.String">
		<property name="com.jaspersoft.studio.field.name" value="nome"/>
		<property name="com.jaspersoft.studio.field.label" value="nome"/>
		<property name="com.jaspersoft.studio.field.tree.path" value="produto"/>
	</field>
	<field name="produto_id" class="java.lang.Long">
		<property name="com.jaspersoft.studio.field.name" value="produto_id"/>
		<property name="com.jaspersoft.studio.field.label" value="produto_id"/>
		<property name="com.jaspersoft.studio.field.tree.path" value="produto_vendido"/>
		<fieldDescription><![CDATA[]]></fieldDescription>
	</field>
	<field name="valor_total_do_item" class="java.lang.Double">
		<property name="com.jaspersoft.studio.field.name" value="valor_total_do_item"/>
		<property name="com.jaspersoft.studio.field.label" value="valor_total_do_item"/>
		<property name="com.jaspersoft.studio.field.tree.path" value="produto_vendido"/>
		<fieldDescription><![CDATA[]]></fieldDescription>
	</field>
	<field name="quantidade" class="java.lang.Integer">
		<property name="com.jaspersoft.studio.field.name" value="quantidade"/>
		<property name="com.jaspersoft.studio.field.label" value="quantidade"/>
		<property name="com.jaspersoft.studio.field.tree.path" value="produto_vendido"/>
		<fieldDescription><![CDATA[]]></fieldDescription>
	</field>
	<field name="id" class="java.lang.Long">
		<property name="com.jaspersoft.studio.field.name" value="id"/>
		<property name="com.jaspersoft.studio.field.label" value="id"/>
		<property name="com.jaspersoft.studio.field.tree.path" value="venda"/>
		<fieldDescription><![CDATA[]]></fieldDescription>
	</field>
	<field name="data_venda" class="java.sql.Date">
		<property name="com.jaspersoft.studio.field.name" value="data_venda"/>
		<property name="com.jaspersoft.studio.field.label" value="data_venda"/>
		<property name="com.jaspersoft.studio.field.tree.path" value="venda"/>
		<fieldDescription><![CDATA[]]></fieldDescription>
	</field>
	<field name="valor_total_venda" class="java.lang.String">
		<property name="com.jaspersoft.studio.field.name" value="valor_total_venda"/>
		<property name="com.jaspersoft.studio.field.label" value="valor_total_venda"/>
		<property name="com.jaspersoft.studio.field.tree.path" value="venda"/>
		<fieldDescription><![CDATA[]]></fieldDescription>
	</field>
	<variable name="SOMA" class="java.lang.Double" calculation="Sum">
		<variableExpression><![CDATA[$F{valor_total_do_item}]]></variableExpression>
	</variable>
	<group name="Group1">
		<groupExpression><![CDATA[$F{id}]]></groupExpression>
		<groupHeader>
			<band height="33">
				<staticText>
					<reportElement mode="Opaque" x="-20" y="0" width="140" height="32" forecolor="#666666" backcolor="#E6E6E6" uuid="d371e858-d57f-4024-a2b3-148d64fd2974"/>
					<box>
						<topPen lineWidth="1.0" lineStyle="Solid"/>
					</box>
					<textElement verticalAlignment="Middle">
						<font fontName="Arial" size="18" isBold="true"/>
					</textElement>
					<text><![CDATA[ID:]]></text>
				</staticText>
				<textField>
					<reportElement mode="Opaque" x="19" y="0" width="556" height="32" forecolor="#006699" backcolor="#E6E6E6" uuid="9874eb4f-dfac-46cf-933e-f9e978478bb4"/>
					<box>
						<topPen lineWidth="1.0" lineStyle="Solid"/>
					</box>
					<textElement verticalAlignment="Middle">
						<font fontName="Arial" size="18" isBold="true"/>
					</textElement>
					<textFieldExpression><![CDATA[$F{id}]]></textFieldExpression>
				</textField>
				<line>
					<reportElement x="-20" y="32" width="595" height="1" forecolor="#666666" uuid="678703c7-a010-45f6-bd13-6164f1ff8e6a"/>
				</line>
				<staticText>
					<reportElement x="144" y="0" width="100" height="33" forecolor="#666666" uuid="88f63049-3111-4630-86c6-71e361ddb4e9"/>
					<textElement verticalAlignment="Middle">
						<font fontName="Arial" size="18" isBold="true"/>
					</textElement>
					<text><![CDATA[DATA:]]></text>
				</staticText>
				<textField pattern="dd/MM/yyyy">
					<reportElement x="216" y="0" width="455" height="33" forecolor="#006699" uuid="e6a52300-d4aa-40d1-9ad5-10d51a68e089"/>
					<textElement verticalAlignment="Middle">
						<font fontName="Arial" size="18" isBold="true"/>
					</textElement>
					<textFieldExpression><![CDATA[$F{data_venda}]]></textFieldExpression>
				</textField>
				<staticText>
					<reportElement x="363" y="0" width="100" height="33" forecolor="#666666" uuid="f563cb69-cda9-4db0-beac-b6e8d4322293"/>
					<textElement verticalAlignment="Middle">
						<font fontName="Arial" size="18" isBold="true"/>
					</textElement>
					<text><![CDATA[V. TOTAL:]]></text>
				</staticText>
				<textField>
					<reportElement x="410" y="0" width="155" height="33" forecolor="#006699" uuid="7afdba6f-a43d-49d9-b3f7-4deb3a73e104"/>
					<textElement textAlignment="Right" verticalAlignment="Middle">
						<font size="18" isBold="true"/>
					</textElement>
					<textFieldExpression><![CDATA[$F{valor_total_venda}]]></textFieldExpression>
				</textField>
			</band>
		</groupHeader>
		<groupFooter>
			<band/>
		</groupFooter>
	</group>
	<group name="Group2">
		<groupExpression><![CDATA[$F{data_venda}]]></groupExpression>
		<groupHeader>
			<band height="30">
				<textField>
					<reportElement x="-20" y="0" width="112" height="30" uuid="179ceaf8-57ac-4110-b2f2-a022c534eb3a"/>
					<textElement textAlignment="Center" verticalAlignment="Middle">
						<font fontName="Arial" size="12" isBold="true"/>
					</textElement>
					<textFieldExpression><![CDATA["CLIENTE:"]]></textFieldExpression>
				</textField>
				<textField>
					<reportElement x="92" y="0" width="92" height="30" uuid="f175e505-7f78-4b1c-850d-28d19f2d0474"/>
					<textElement textAlignment="Center" verticalAlignment="Middle">
						<font fontName="Arial" size="12" isBold="true"/>
					</textElement>
					<textFieldExpression><![CDATA["PRODUTOS:"]]></textFieldExpression>
				</textField>
				<textField>
					<reportElement x="189" y="0" width="100" height="30" uuid="9e588343-586c-4c12-ab11-af96d403d77d"/>
					<textElement textAlignment="Center" verticalAlignment="Middle">
						<font fontName="Arial" size="12" isBold="true"/>
					</textElement>
					<textFieldExpression><![CDATA["QTD:"]]></textFieldExpression>
				</textField>
				<textField>
					<reportElement x="270" y="0" width="100" height="30" uuid="d59bcdab-c428-4af4-b776-a88190bdb64d"/>
					<textElement textAlignment="Center" verticalAlignment="Middle">
						<font fontName="Arial" size="12" isBold="true"/>
					</textElement>
					<textFieldExpression><![CDATA["V. UN:"]]></textFieldExpression>
				</textField>
				<textField>
					<reportElement x="369" y="0" width="100" height="30" uuid="492b0e4e-8bf3-4aa4-a710-6b887a54403d"/>
					<textElement textAlignment="Center" verticalAlignment="Middle">
						<font fontName="Arial" size="12" isBold="true"/>
					</textElement>
					<textFieldExpression><![CDATA["V.TOTAL:"]]></textFieldExpression>
				</textField>
				<textField>
					<reportElement x="465" y="0" width="100" height="30" uuid="936a3d04-b9cd-4933-a190-ca655b1eda2e"/>
					<textElement textAlignment="Center" verticalAlignment="Middle">
						<font fontName="Arial" size="12" isBold="true"/>
					</textElement>
					<textFieldExpression><![CDATA["PAGAMENTO:"]]></textFieldExpression>
				</textField>
			</band>
		</groupHeader>
		<groupFooter>
			<band/>
		</groupFooter>
	</group>
	<group name="Group3">
		<groupExpression><![CDATA[$F{valor_total_venda}]]></groupExpression>
		<groupFooter>
			<band/>
		</groupFooter>
	</group>
	<background>
		<band height="802">
			<pieChart>
				<chart evaluationTime="Report">
					<reportElement x="-20" y="470" width="595" height="280" uuid="1925dc76-f56e-4f78-9bdd-e60307bbaaa2"/>
					<chartTitle/>
					<chartSubtitle/>
					<chartLegend/>
				</chart>
				<pieDataset>
					<dataset resetType="Report"/>
					<keyExpression><![CDATA[$F{nome}]]></keyExpression>
					<valueExpression><![CDATA[$V{SOMA}]]></valueExpression>
					<labelExpression><![CDATA[$F{valor_total_venda}]]></labelExpression>
				</pieDataset>
				<piePlot>
					<plot/>
					<itemLabel/>
				</piePlot>
			</pieChart>
		</band>
	</background>
	<title>
		<band height="72">
			<frame>
				<reportElement mode="Opaque" x="-20" y="-20" width="595" height="92" backcolor="#006699" uuid="8d4c2454-bc47-4f74-be71-697fc34c0512"/>
				<staticText>
					<reportElement x="0" y="0" width="595" height="92" forecolor="#FFFFFF" uuid="6c72277e-c9f6-498e-8f9d-5d328ffa4753"/>
					<textElement textAlignment="Center" verticalAlignment="Middle">
						<font size="34" isBold="true"/>
					</textElement>
					<text><![CDATA[RELATÓRIO VENDAS]]></text>
				</staticText>
			</frame>
		</band>
	</title>
	<pageHeader>
		<band/>
	</pageHeader>
	<detail>
		<band height="20">
			<textField textAdjust="StretchHeight">
				<reportElement isPrintRepeatedValues="false" x="-25" y="0" width="112" height="20" uuid="dd3d7ffa-99ab-438c-94a2-899acecd6311">
					<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="b46fbfd4-5bc3-4027-86e2-a941e8386fe9"/>
				</reportElement>
				<box>
					<topPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
					<leftPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
					<bottomPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
					<rightPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
				</box>
				<textElement textAlignment="Center" verticalAlignment="Middle">
					<font fontName="Arial" size="12"/>
				</textElement>
				<textFieldExpression><![CDATA[$F{nome}]]></textFieldExpression>
			</textField>
			<textField textAdjust="StretchHeight">
				<reportElement x="189" y="0" width="92" height="20" uuid="c1aa6ada-9f2b-4e43-aeaa-2a2c4456adc2">
					<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="2c039e35-8270-4de0-aa55-2f1712f81d38"/>
				</reportElement>
				<box>
					<topPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
					<leftPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
					<bottomPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
					<rightPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
				</box>
				<textElement textAlignment="Center" verticalAlignment="Middle">
					<font fontName="Arial" size="12"/>
				</textElement>
				<textFieldExpression><![CDATA[$F{quantidade}]]></textFieldExpression>
			</textField>
			<textField textAdjust="StretchHeight" pattern="R$ #,##0.###;#,##0.###-">
				<reportElement x="274" y="0" width="92" height="20" uuid="a377dc83-f41c-4830-bd80-abc8b17349ab">
					<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="59862b9a-0f90-4623-8b08-b1355dc98f2a"/>
				</reportElement>
				<box>
					<topPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
					<leftPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
					<bottomPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
					<rightPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
				</box>
				<textElement textAlignment="Center" verticalAlignment="Middle">
					<font fontName="Arial" size="12"/>
				</textElement>
				<textFieldExpression><![CDATA[$F{valor}]]></textFieldExpression>
			</textField>
			<textField textAdjust="StretchHeight" pattern="R$ #,##0.###;#,##0.###-">
				<reportElement x="373" y="0" width="92" height="20" uuid="9384d6f1-5012-4f79-b0ab-75f7f6bf11d2">
					<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="5b78961a-669d-46a8-96f9-c33fcc027655"/>
				</reportElement>
				<box>
					<topPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
					<leftPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
					<bottomPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
					<rightPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
				</box>
				<textElement textAlignment="Center" verticalAlignment="Middle">
					<font fontName="Arial" size="12"/>
				</textElement>
				<textFieldExpression><![CDATA[$F{valor_total_do_item}]]></textFieldExpression>
			</textField>
			<textField textAdjust="StretchHeight">
				<reportElement isPrintRepeatedValues="false" x="460" y="0" width="92" height="20" uuid="064003e8-0f0f-4503-9a01-3b44353d0ed0">
					<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="2538832a-7b45-4edd-94a9-fb763cca4a79"/>
				</reportElement>
				<box>
					<topPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
					<leftPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
					<bottomPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
					<rightPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
				</box>
				<textElement textAlignment="Center" verticalAlignment="Middle">
					<font fontName="Arial" size="12"/>
				</textElement>
				<textFieldExpression><![CDATA[$F{forma_de_pagamento}]]></textFieldExpression>
			</textField>
			<textField>
				<reportElement x="87" y="0" width="100" height="20" uuid="6a64fe93-0880-423f-84ab-149973c37b3e"/>
				<textElement textAlignment="Center" verticalAlignment="Middle">
					<font fontName="Arial" size="12"/>
				</textElement>
				<textFieldExpression><![CDATA[$F{COLUMN_4}]]></textFieldExpression>
			</textField>
		</band>
	</detail>
	<columnFooter>
		<band height="30">
			<staticText>
				<reportElement mode="Opaque" x="0" y="0" width="555" height="30" backcolor="#E6E6E6" uuid="a7b13d4b-b074-45b9-af50-e6b3b6d857d6"/>
				<textElement textAlignment="Left" verticalAlignment="Middle">
					<font fontName="Arial" size="18" isBold="true"/>
				</textElement>
				<text><![CDATA[VALOR TOTAL:]]></text>
			</staticText>
			<textField pattern="R$ #,##0.###;#,##0.###-">
				<reportElement x="170" y="0" width="385" height="30" uuid="9f6f9c3b-96a9-465e-a480-e8b00332b3a1"/>
				<textElement textAlignment="Right" verticalAlignment="Middle">
					<font fontName="Arial" size="18"/>
				</textElement>
				<textFieldExpression><![CDATA[$V{SOMA}]]></textFieldExpression>
			</textField>
		</band>
	</columnFooter>
	<pageFooter>
		<band height="17">
			<textField>
				<reportElement mode="Opaque" x="0" y="4" width="515" height="13" backcolor="#E6E6E6" uuid="7ab179f1-5336-474f-a42f-f4e2fac2d72f"/>
				<textElement textAlignment="Right"/>
				<textFieldExpression><![CDATA["Page "+$V{PAGE_NUMBER}+" of"]]></textFieldExpression>
			</textField>
			<textField evaluationTime="Report">
				<reportElement mode="Opaque" x="515" y="4" width="40" height="13" backcolor="#E6E6E6" uuid="3e1e1fc6-1c93-4084-817b-bafeda9095d7"/>
				<textFieldExpression><![CDATA[" " + $V{PAGE_NUMBER}]]></textFieldExpression>
			</textField>
			<textField pattern="EEEEE dd MMMMM yyyy">
				<reportElement x="0" y="4" width="100" height="13" uuid="cdfc878d-a70c-4985-9078-3f0faf78aad6"/>
				<textFieldExpression><![CDATA[new java.util.Date()]]></textFieldExpression>
			</textField>
		</band>
	</pageFooter>
	<summary>
		<band/>
	</summary>
</jasperReport>
R

Mano, caso não de certo pelo jrxml, será que seria possível fazer a conversão diretamente no MySQL?

Converter de Varchar para Decimal? Ou tentar um tipo de “mascara”?

Lucas_Camara

No banco de dados, esse campo de valor total não poderia ser VARCHAR mesmo não, pois essa coluna representa um valor monetário.

R

Então como eu no começo não tinha ideia de como fazer o banco usei Varchar…agora vejo apenas 3 opções

1ª tentar no arquivo jrxml
2ª tentar converter esse Varchar para decimal no workbench
3ª Alterar na aplicação e no DB, passando de String para Double

Lucas_Camara

No JRXML é melhor trabalhar com o dado no tipo correto, pois para mudar a formatação para ser apresentado no relatório, o jasper possui mecanismos para isso.

Seria bom vc fazer isso msm. Ia ficar mais correto no ponto de vista de modelagem de banco de dados.

Lucas_Camara

Use DECIMAL msm

R

Mano 1ª coisa que fiz fui na classe Venda e alterei ela:

package br.com.fjsistemas.backend;

import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;

@Entity
public class Venda {

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Long id;

	private LocalDate dataVenda = LocalDate.now();

	@ManyToOne
	private Cliente cliente;

	@ManyToOne
	private FormaDePagamento formaDePagamento;

	@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.PERSIST)
	private List<ProdutoVendido> produtos = new ArrayList<>();

	private Double valorTotalVenda; //aqui estava String

	public Venda() {

	}

	public Venda(Long id, LocalDate dataVenda, Cliente cliente, FormaDePagamento formaDePagamento,
			List<ProdutoVendido> produtos, Double valorTotalVenda) {
		super();
		this.id = id;
		this.dataVenda = dataVenda;
		this.cliente = cliente;
		this.formaDePagamento = formaDePagamento;
		this.produtos = produtos;
		this.valorTotalVenda = valorTotalVenda;
	}

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public LocalDate getDataVenda() {
		return dataVenda;
	}

	public void setDataVenda(LocalDate dataVenda) {
		this.dataVenda = dataVenda;
	}

	public Cliente getCliente() {
		return cliente;
	}

	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}

	public FormaDePagamento getFormaDePagamento() {
		return formaDePagamento;
	}

	public void setFormaDePagamento(FormaDePagamento formaDePagamento) {
		this.formaDePagamento = formaDePagamento;
	}

	public List<ProdutoVendido> getProdutos() {
		return produtos;
	}

	public void setProdutos(List<ProdutoVendido> produtos) {
		this.produtos = produtos;
	}

	public Double getValorTotalVenda() {
		return valorTotalVenda;
	}

	public void setValorTotalVenda(Double valorTotalVenda) {
		this.valorTotalVenda = valorTotalVenda;
	}

	public void addProduto(Produto produto) {

	}

	public void addProduto(Produto produto, Integer quantidade, Double valor, Double valorTotalDoItem) {
		ProdutoVendido produtoVenda = new ProdutoVendido(null, this, produto, quantidade, valorTotalDoItem);
		produtos.add(produtoVenda);
	}

	public double recuperarValorTotal() {
		double valorTotal = 0;

		for (ProdutoVendido pv : produtos) {
			valorTotal += pv.getValorCalculado();
		}

		return valorTotal;
	}

}
R

agora aqui na classe RelatorioView tenho este metodo:

private void somaValoresRelatorio() {

		NumberFormat formatter = NumberFormat.getCurrencyInstance(new Locale("pt", "BR"));

		double soma = 0;

		for (Venda venda : listaVendas) {
			try {
				soma += formatter.parse(venda.getValorTotalVenda()).doubleValue(); //aqui está dando um erro de compilação na palavra parse
			} catch (ParseException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

		somaValores.setValue(formatter.format(soma));
	}

que gera o valor total de todas as vendas

Lucas_Camara

Uai mano, agora que o valor total já é um double, vc não precisa mais formatar:

soma += venda.getValorTotalVenda();

e não precisa mais desse try ... catch

R
package br.com.fjsistemas.relatorios;

import java.io.ByteArrayInputStream;
import java.sql.SQLException;
import java.text.NumberFormat;
import java.text.ParseException;
import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.Locale;
import java.util.Set;

import org.springframework.beans.factory.annotation.Autowired;
import org.vaadin.olli.FileDownloadWrapper;

import com.vaadin.flow.component.button.Button;
import com.vaadin.flow.component.button.ButtonVariant;
import com.vaadin.flow.component.datepicker.DatePicker;
import com.vaadin.flow.component.grid.Grid;
import com.vaadin.flow.component.grid.Grid.SelectionMode;
import com.vaadin.flow.component.html.Label;
import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.component.textfield.TextField;
import com.vaadin.flow.data.binder.PropertyId;
import com.vaadin.flow.data.renderer.LocalDateRenderer;
import com.vaadin.flow.data.selection.MultiSelect;
import com.vaadin.flow.router.PageTitle;
import com.vaadin.flow.router.Route;
import com.vaadin.flow.server.StreamResource;

import br.com.fjsistemas.backend.Venda;
import br.com.fjsistemas.main.MainView;
import br.com.fjsistemas.repository.VendaRepository;
import net.sf.jasperreports.engine.JRException;

@Route(value = "relatorio-view", layout = MainView.class)
@PageTitle("Relatório de Vendas")
public class RelatorioVendaView extends VerticalLayout {

	private static final long serialVersionUID = 1L;

	private HorizontalLayout layoutDatas = new HorizontalLayout();

	private Button gerarRelatorio = new Button("Gerar Relatório");
	private Button exportarRelatorio = new Button("Exportar Relatório");

	private Grid<Venda> grid = new Grid<>();

	@Autowired
	private ConverteJrxmlToPdf pdf;

	Label label = new Label("Valor Total no Periodo:");

	@PropertyId("dataInicio")
	private DatePicker dataInicio = new DatePicker("Início");

	@PropertyId("dataFim")
	private DatePicker dataFim = new DatePicker("Final");

	@PropertyId("somaValores")
	private TextField somaValores = new TextField();

	@Autowired
	private VendaRepository vendaRepository;

	private List<Venda> listaVendas;

	Set<Venda> idsVendasSelecionadas;

	public RelatorioVendaView() {
		configuraRelatorio();
	}

	private void populaInformacao() {

		listaVendas = vendaRepository.findAllByDataVendaBetween(dataInicio.getValue(), dataFim.getValue());
		try {
			somaValoresRelatorio();
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		atualizaGrdVenda();

	}

	private void atualizaGrdVenda() {
		grid.setItems(listaVendas);
	}

	private void somaValoresRelatorio() throws ParseException {

		NumberFormat formatter = NumberFormat.getCurrencyInstance(new Locale("pt", "BR"));

		double soma = 0;

		for (Venda venda : listaVendas) {
			soma += venda.getValorTotalVenda();
		}

		somaValores.setValue(formatter.format(soma));
	}

	@SuppressWarnings("unused")
	private void configuraRelatorio() {

		grid.setWidthFull();
		grid.setHeight("740px");

		grid.addColumn(Venda::getId).setHeader("ID:").setAutoWidth(true);

		grid.addColumn(new LocalDateRenderer<>(Venda::getDataVenda, DateTimeFormatter.ofPattern("dd/MM/yyy")))
				.setHeader("Data Venda").setAutoWidth(true);

		grid.addColumn(venda -> venda.getCliente().getNome()).setHeader("Nome:").setAutoWidth(true)
				.setKey("cliente.nome");

		grid.addColumn(Venda::getValorTotalVenda).setHeader("Valor Total:").setAutoWidth(true)
				.setKey("valorTotalVenda");

		grid.getColumns().forEach(col -> col.setAutoWidth(true).setSortable(true).setResizable(true));

		grid.setSelectionMode(SelectionMode.MULTI);

		MultiSelect<Grid<Venda>, Venda> multiSelect = grid.asMultiSelect();
		multiSelect.addValueChangeListener(e -> {
			this.idsVendasSelecionadas = e.getValue();
		});

		gerarRelatorio.addThemeVariants(ButtonVariant.LUMO_PRIMARY);
		gerarRelatorio.getStyle().set("margin-top", "37px");
		gerarRelatorio.setWidth("180px");
		gerarRelatorio.addClickListener(event -> {
			populaInformacao();
		});

		exportarRelatorio.addThemeVariants(ButtonVariant.LUMO_PRIMARY);
		exportarRelatorio.getStyle().set("margin-top", "37px");
		exportarRelatorio.setWidth("180px");
		exportarRelatorio.addClickListener(evento -> {

		});

		FileDownloadWrapper buttonWrapper = new FileDownloadWrapper(new StreamResource("RelatorioVenda.pdf", () -> {
			try {
				return new ByteArrayInputStream(pdf.conversor(idsVendasSelecionadas));
			} catch (JRException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

			return null;
		}));

		buttonWrapper.wrapComponent(exportarRelatorio);
		add(buttonWrapper);

		somaValores.setWidth("245px");
		somaValores.getStyle().set("margin-left", "620px");
		somaValores.setLabel("Valor Total no Período");

		dataInicio.setWidth("181px");
		dataFim.setWidth("181px");

		layoutDatas.add(dataInicio, dataFim, gerarRelatorio, buttonWrapper, somaValores);

		add(layoutDatas, grid);
	}

	public List<Venda> getListaVenda() {
		return listaVendas;
	}

	public void setListaVenda(List<Venda> listaVenda) {
		this.listaVendas = listaVenda;
	}

}

O meu relatório view está como acima, não há erros de compilação

estou recebendo este stack:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'br.com.fjsistemas.compra.venda.view.VendaView': Invocation of init method failed; nested exception is java.lang.IllegalStateException: Property type 'java.lang.Double' doesn't match the field type 'java.lang.String'. Binding should be configured manually using converter.
	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:160) ~[spring-beans-5.3.6.jar:5.3.6]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:422) ~[spring-beans-5.3.6.jar:5.3.6]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1778) ~[spring-beans-5.3.6.jar:5.3.6]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:602) ~[spring-beans-5.3.6.jar:5.3.6]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) ~[spring-beans-5.3.6.jar:5.3.6]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:314) ~[spring-beans-5.3.6.jar:5.3.6]
	at com.vaadin.flow.spring.SpringInstantiator.getOrCreate(SpringInstantiator.java:117) ~[vaadin-spring-12.4.0.jar:na]
	at com.vaadin.flow.di.Instantiator.createRouteTarget(Instantiator.java:165) ~[flow-server-2.6.3.jar:2.6.3]
	at com.vaadin.flow.router.internal.AbstractNavigationStateRenderer.lambda$getRouteTarget$1(AbstractNavigationStateRenderer.java:139) ~[flow-server-2.6.3.jar:2.6.3]
	at java.base/java.util.Optional.orElseGet(Optional.java:362) ~[na:na]
	at com.vaadin.flow.router.internal.AbstractNavigationStateRenderer.getRouteTarget(AbstractNavigationStateRenderer.java:138) ~[flow-server-2.6.3.jar:2.6.3]
	at com.vaadin.flow.router.internal.AbstractNavigationStateRenderer.sendBeforeEnterEventAndPopulateChain(AbstractNavigationStateRenderer.java:527) ~[flow-server-2.6.3.jar:2.6.3]
	at com.vaadin.flow.router.internal.AbstractNavigationStateRenderer.createChainIfEmptyAndExecuteBeforeEnterNavigation(AbstractNavigationStateRenderer.java:507) ~[flow-server-2.6.3.jar:2.6.3]
	at com.vaadin.flow.router.internal.AbstractNavigationStateRenderer.handle(AbstractNavigationStateRenderer.java:224) ~[flow-server-2.6.3.jar:2.6.3]
	at com.vaadin.flow.router.Router.handleNavigation(Router.java:249) ~[flow-server-2.6.3.jar:2.6.3]
	at com.vaadin.flow.router.Router.navigate(Router.java:220) ~[flow-server-2.6.3.jar:2.6.3]
	at com.vaadin.flow.router.Router.navigate(Router.java:186) ~[flow-server-2.6.3.jar:2.6.3]
	at com.vaadin.flow.router.Router.initializeUI(Router.java:93) ~[flow-server-2.6.3.jar:2.6.3]
	at com.vaadin.flow.server.BootstrapHandler.initializeUIWithRouter(BootstrapHandler.java:1560) ~[flow-server-2.6.3.jar:2.6.3]
	at com.vaadin.flow.server.BootstrapHandler.createAndInitUI(BootstrapHandler.java:1553) ~[flow-server-2.6.3.jar:2.6.3]
	at com.vaadin.flow.server.BootstrapHandler.synchronizedHandleRequest(BootstrapHandler.java:474) ~[flow-server-2.6.3.jar:2.6.3]
	at com.vaadin.flow.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:40) ~[flow-server-2.6.3.jar:2.6.3]
	at com.vaadin.flow.server.VaadinService.handleRequest(VaadinService.java:1570) ~[flow-server-2.6.3.jar:2.6.3]
	at com.vaadin.flow.server.VaadinServlet.service(VaadinServlet.java:252) ~[flow-server-2.6.3.jar:2.6.3]
	at com.vaadin.flow.spring.SpringServlet.service(SpringServlet.java:111) ~[vaadin-spring-12.4.0.jar:na]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.45.jar:4.0.FR]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:710) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:457) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:352) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:312) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.springframework.web.servlet.mvc.ServletForwardingController.handleRequestInternal(ServletForwardingController.java:141) ~[spring-webmvc-5.3.6.jar:5.3.6]
	at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:177) ~[spring-webmvc-5.3.6.jar:5.3.6]
	at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:52) ~[spring-webmvc-5.3.6.jar:5.3.6]
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1060) ~[spring-webmvc-5.3.6.jar:5.3.6]
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962) ~[spring-webmvc-5.3.6.jar:5.3.6]
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.6.jar:5.3.6]
	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.6.jar:5.3.6]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:626) ~[tomcat-embed-core-9.0.45.jar:4.0.FR]
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.6.jar:5.3.6]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.45.jar:4.0.FR]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.45.jar:9.0.45]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.6.jar:5.3.6]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.6.jar:5.3.6]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.6.jar:5.3.6]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.6.jar:5.3.6]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.6.jar:5.3.6]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.6.jar:5.3.6]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at java.base/java.lang.Thread.run(Thread.java:830) ~[na:na]
Caused by: java.lang.IllegalStateException: Property type 'java.lang.Double' doesn't match the field type 'java.lang.String'. Binding should be configured manually using converter.
	at com.vaadin.flow.data.binder.Binder.bindProperty(Binder.java:2930) ~[flow-data-2.6.3.jar:2.6.3]
	at com.vaadin.flow.data.binder.Binder.lambda$null$26(Binder.java:2830) ~[flow-data-2.6.3.jar:2.6.3]
	at com.vaadin.flow.data.binder.Binder.handleProperty(Binder.java:3019) ~[flow-data-2.6.3.jar:2.6.3]
	at com.vaadin.flow.data.binder.Binder.lambda$bindInstanceFields$27(Binder.java:2828) ~[flow-data-2.6.3.jar:2.6.3]
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195) ~[na:na]
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:177) ~[na:na]
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:177) ~[na:na]
	at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1621) ~[na:na]
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) ~[na:na]
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) ~[na:na]
	at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913) ~[na:na]
	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:na]
	at java.base/java.util.stream.ReferencePipeline.reduce(ReferencePipeline.java:563) ~[na:na]
	at com.vaadin.flow.data.binder.Binder.bindInstanceFields(Binder.java:2832) ~[flow-data-2.6.3.jar:2.6.3]
	at br.com.fjsistemas.compra.venda.view.VendaView.configuraBinder(VendaView.java:531) ~[classes/:na]
	at br.com.fjsistemas.compra.venda.view.VendaView.configuraTela(VendaView.java:172) ~[classes/:na]
	at br.com.fjsistemas.compra.venda.view.VendaView.init(VendaView.java:159) ~[classes/:na]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
	at java.base/java.lang.reflect.Method.invoke(Method.java:567) ~[na:na]
	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:389) ~[spring-beans-5.3.6.jar:5.3.6]
	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:333) ~[spring-beans-5.3.6.jar:5.3.6]
	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:157) ~[spring-beans-5.3.6.jar:5.3.6]
	... 74 common frames omitted

creio eu que seja pelo seguinte motivo, agora que não estou formatando mais estou recebendo o resultado(Double) e estou tentando setar ele em um TextField(String)

Lucas_Camara

O erro parece que está na classe VendaView e não na RelatorioVendaView

R

@Lucas_Camara

Mano, boa tarde, consegui fazer isso:

Mas como vc vê na imagem os dados não estão onde deveriam estar…

O que pode estar havendo?

Lucas_Camara

Esses dados estão vindos da consulta sql do relatório? Se sim, como está essa consulta agora?

R

Não, o que eu fiz foi o seguinte…criei duas variaveis SOMA1 e SOMA2, ambas somam a mesma coluna(nome da coluna: valor_total_item do tipo Double), a consulta sql não foi alterada:

SQL:

SELECT fjsistemas.cliente.nome,
	fjsistemas.forma_de_pagamento.forma_de_pagamento,
	fjsistemas.produto.valor,
	fjsistemas.produto.nome,
	fjsistemas.produto_vendido.produto_id,
	fjsistemas.produto_vendido.valor_total_do_item,
	fjsistemas.produto_vendido.quantidade,
	fjsistemas.venda.id,
	fjsistemas.venda.data_venda,
	fjsistemas.venda.valor_total_venda
FROM fjsistemas.venda
	INNER JOIN fjsistemas.cliente ON 
	 fjsistemas.cliente.id = fjsistemas.venda.cliente_id 
	INNER JOIN fjsistemas.forma_de_pagamento ON 
	 fjsistemas.forma_de_pagamento.id = fjsistemas.venda.forma_de_pagamento_id 
	INNER JOIN fjsistemas.produto_vendido ON 
	 fjsistemas.produto_vendido.venda_id = fjsistemas.venda.id 
	INNER JOIN fjsistemas.produto ON 
	 fjsistemas.produto.id = fjsistemas.produto_vendido.produto_id 
WHERE 
	 $X{IN,fjsistemas.venda.id,idsVendasSelecionadas} 
ORDER BY fjsistemas.venda.id ASC
Lucas_Camara

Mas onde vc está usando o SOMA1 e SOMA2? E como vc está atribuíndo o valor para essas variáveis?

R

SOMA1 uso na parte superior para somar os itens de cada ID

SOMA2 uso na parte inferior que soma todos os itens de todos os IDs

R

SOMA

SOMA2

Lucas_Camara

Acho que vc não precisa dessa variável $V{SOMA}. Se o valor total da venda está sendo retornada em fjsistemas.venda.valor_total_venda, pq vc não usa o valor dessa coluna diretamente como, por exemplo, ${valorTotalVenda}?

R

Pq ela está como String…

Lucas_Camara

Achei que tu tinha conseguido alterar no banco para DECIMAL. Deu algum problema?

R

Na aplicação da vários problemas. Estou tentando corrigir, pois DE FATO será minha única saída

Lucas_Camara

Sem falar que seu projeto ficará mais correto. Usar o tipo de dado correto é muito importante e evita vários problemas no decorrer do desenvolvimento.

R

@Lucas_Camara

Mano, bom dia, vc poderia me ajudar?

Situação:

Na minha classe Venda(Entity) eu tinha a variável:

private String valorTotalVenda;

Construtor:

public Venda(Long id, LocalDate dataVenda, Cliente cliente, FormaDePagamento formaDePagamento,
			List<ProdutoVendido> produtos, String valorTotalVenda) {

		this.id = id;
		this.dataVenda = dataVenda;
		this.cliente = cliente;
		this.formaDePagamento = formaDePagamento;
		this.produtos = produtos;
		this.valorTotalVenda = valorTotalVenda;
	}

e os get e and set:

public String getValorTotalVenda() {
		return valorTotalVenda;
	}

	public void setValorTotalVenda(String valorTotalVenda) {
		this.valorTotalVenda = valorTotalVenda;
	}

Então alterei a variável para:

private Double valorTotalVenda;

Construtor:

public Venda(Long id, LocalDate dataVenda, Cliente cliente, FormaDePagamento formaDePagamento,
			List<ProdutoVendido> produtos, Double valorTotalVenda) {

		this.id = id;
		this.dataVenda = dataVenda;
		this.cliente = cliente;
		this.formaDePagamento = formaDePagamento;
		this.produtos = produtos;
		this.valorTotalVenda = valorTotalVenda;
	}

e os get e and set:

public Double getValorTotalVenda() {
		return valorTotalVenda;
	}

	public void setValorTotalVenda(Double valorTotalVenda) {
		this.valorTotalVenda = valorTotalVenda;
	}

até aqui tudo certo…com as alterações feitas, surgiu um erro de compilação na classe RelatorioVendaView, dentro do metodo:

que estava assim:

private void somaValoresRelatorio() {

		NumberFormat formatter = NumberFormat.getCurrencyInstance(new Locale("pt", "BR"));

		double soma = 0;

		for (Venda venda : listaVendas) {
			try {
				soma += formatter.parse(venda.getValorTotalVenda()).doubleValue();//o erro estava na palavra parse
			} catch (ParseException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

		somaValores.setValue(formatter.format(soma));
	}

então alterei para ficar assim e o erro de compilação deixou de existir

código atual:

private void somaValoresRelatorio() {

	NumberFormat formatter = NumberFormat.getCurrencyInstance(new Locale("pt", "BR"));

	double soma = 0;

	for (Venda venda : listaVendas) {
		soma += venda.getValorTotalVenda();
	}

	somaValores.setValue(formatter.format(soma));
}

Verifiquei no Mysql que a variavel valorTotalVenda que antes estava como VARCHAR passou para DOUBLE

Ao rodar a aplicação toda parte de cadastro está funcionando perfeitamente, então fui para a tela de vendas, para realizar uma venda, ao clicar em Lançamentos o menu se abre com a opções de Venda e Solicitação de Compra

quando clico em venda:

stack completo:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'br.com.fjsistemas.compra.venda.view.VendaView': Invocation of init method failed; nested exception is java.lang.IllegalStateException: Property type 'java.lang.Double' doesn't match the field type 'java.lang.String'. Binding should be configured manually using converter.
 	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:160) ~[spring-beans-5.3.6.jar:5.3.6]
 	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:422) ~[spring-beans-5.3.6.jar:5.3.6]
 	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1778) ~[spring-beans-5.3.6.jar:5.3.6]
 	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:602) ~[spring-beans-5.3.6.jar:5.3.6]
 	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) ~[spring-beans-5.3.6.jar:5.3.6]
 	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:314) ~[spring-beans-5.3.6.jar:5.3.6]
 	at com.vaadin.flow.spring.SpringInstantiator.getOrCreate(SpringInstantiator.java:117) ~[vaadin-spring-12.4.0.jar:na]
 	at com.vaadin.flow.di.Instantiator.createRouteTarget(Instantiator.java:165) ~[flow-server-2.6.3.jar:2.6.3]
 	at com.vaadin.flow.router.internal.AbstractNavigationStateRenderer.lambda$getRouteTarget$1(AbstractNavigationStateRenderer.java:139) ~[flow-server-2.6.3.jar:2.6.3]
 	at java.base/java.util.Optional.orElseGet(Optional.java:362) ~[na:na]
 	at com.vaadin.flow.router.internal.AbstractNavigationStateRenderer.getRouteTarget(AbstractNavigationStateRenderer.java:138) ~[flow-server-2.6.3.jar:2.6.3]
 	at com.vaadin.flow.router.internal.AbstractNavigationStateRenderer.sendBeforeEnterEventAndPopulateChain(AbstractNavigationStateRenderer.java:527) ~[flow-server-2.6.3.jar:2.6.3]
 	at com.vaadin.flow.router.internal.AbstractNavigationStateRenderer.createChainIfEmptyAndExecuteBeforeEnterNavigation(AbstractNavigationStateRenderer.java:507) ~[flow-server-2.6.3.jar:2.6.3]
 	at com.vaadin.flow.router.internal.AbstractNavigationStateRenderer.handle(AbstractNavigationStateRenderer.java:224) ~[flow-server-2.6.3.jar:2.6.3]
 	at com.vaadin.flow.router.Router.handleNavigation(Router.java:249) ~[flow-server-2.6.3.jar:2.6.3]
 	at com.vaadin.flow.router.Router.navigate(Router.java:220) ~[flow-server-2.6.3.jar:2.6.3]
 	at com.vaadin.flow.router.Router.lambda$initializeUI$caa7783a$1(Router.java:90) ~[flow-server-2.6.3.jar:2.6.3]
 	at com.vaadin.flow.server.communication.rpc.NavigationRpcHandler.handle(NavigationRpcHandler.java:68) ~[flow-server-2.6.3.jar:2.6.3]
 	at com.vaadin.flow.server.communication.ServerRpcHandler.handleInvocationData(ServerRpcHandler.java:412) ~[flow-server-2.6.3.jar:2.6.3]
 	at com.vaadin.flow.server.communication.ServerRpcHandler.lambda$handleInvocations$1(ServerRpcHandler.java:393) ~[flow-server-2.6.3.jar:2.6.3]
 	at java.base/java.util.ArrayList.forEach(ArrayList.java:1507) ~[na:na]
 	at com.vaadin.flow.server.communication.ServerRpcHandler.handleInvocations(ServerRpcHandler.java:393) ~[flow-server-2.6.3.jar:2.6.3]
 	at com.vaadin.flow.server.communication.ServerRpcHandler.handleRpc(ServerRpcHandler.java:320) ~[flow-server-2.6.3.jar:2.6.3]
 	at com.vaadin.flow.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:92) ~[flow-server-2.6.3.jar:2.6.3]
 	at com.vaadin.flow.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:40) ~[flow-server-2.6.3.jar:2.6.3]
 	at com.vaadin.flow.server.VaadinService.handleRequest(VaadinService.java:1570) ~[flow-server-2.6.3.jar:2.6.3]
 	at com.vaadin.flow.server.VaadinServlet.service(VaadinServlet.java:252) ~[flow-server-2.6.3.jar:2.6.3]
 	at com.vaadin.flow.spring.SpringServlet.service(SpringServlet.java:111) ~[vaadin-spring-12.4.0.jar:na]
 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.45.jar:4.0.FR]
 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
 	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:710) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
 	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:457) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
 	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:352) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
 	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:312) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
 	at org.springframework.web.servlet.mvc.ServletForwardingController.handleRequestInternal(ServletForwardingController.java:141) ~[spring-webmvc-5.3.6.jar:5.3.6]
 	at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:177) ~[spring-webmvc-5.3.6.jar:5.3.6]
 	at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:52) ~[spring-webmvc-5.3.6.jar:5.3.6]
 	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1060) ~[spring-webmvc-5.3.6.jar:5.3.6]
 	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962) ~[spring-webmvc-5.3.6.jar:5.3.6]
 	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.6.jar:5.3.6]
 	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) ~[spring-webmvc-5.3.6.jar:5.3.6]
 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:652) ~[tomcat-embed-core-9.0.45.jar:4.0.FR]
 	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.6.jar:5.3.6]
 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.45.jar:4.0.FR]
 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
 	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.45.jar:9.0.45]
 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
 	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.6.jar:5.3.6]
 	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.6.jar:5.3.6]
 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
 	at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.6.jar:5.3.6]
 	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.6.jar:5.3.6]
 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
 	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.6.jar:5.3.6]
 	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.6.jar:5.3.6]
 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
 	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
 	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
 	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
 	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
 	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
 	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
 	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
 	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
 	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
 	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
 	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
 	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
 	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
 	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
 	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
 	at java.base/java.lang.Thread.run(Thread.java:830) ~[na:na]
 Caused by: java.lang.IllegalStateException: Property type 'java.lang.Double' doesn't match the field type 'java.lang.String'. Binding should be configured manually using converter.
 	at com.vaadin.flow.data.binder.Binder.bindProperty(Binder.java:2930) ~[flow-data-2.6.3.jar:2.6.3]
 	at com.vaadin.flow.data.binder.Binder.lambda$null$26(Binder.java:2830) ~[flow-data-2.6.3.jar:2.6.3]
 	at com.vaadin.flow.data.binder.Binder.handleProperty(Binder.java:3019) ~[flow-data-2.6.3.jar:2.6.3]
 	at com.vaadin.flow.data.binder.Binder.lambda$bindInstanceFields$27(Binder.java:2828) ~[flow-data-2.6.3.jar:2.6.3]
 	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195) ~[na:na]
 	at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:177) ~[na:na]
 	at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:177) ~[na:na]
 	at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1621) ~[na:na]
 	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) ~[na:na]
 	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) ~[na:na]
 	at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913) ~[na:na]
 	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:na]
 	at java.base/java.util.stream.ReferencePipeline.reduce(ReferencePipeline.java:563) ~[na:na]
 	at com.vaadin.flow.data.binder.Binder.bindInstanceFields(Binder.java:2832) ~[flow-data-2.6.3.jar:2.6.3]
 	at br.com.fjsistemas.compra.venda.view.VendaView.configuraBinder(VendaView.java:531) ~[classes/:na]
 	at br.com.fjsistemas.compra.venda.view.VendaView.configuraTela(VendaView.java:172) ~[classes/:na]
 	at br.com.fjsistemas.compra.venda.view.VendaView.init(VendaView.java:159) ~[classes/:na]
 	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
 	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
 	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
 	at java.base/java.lang.reflect.Method.invoke(Method.java:567) ~[na:na]
 	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:389) ~[spring-beans-5.3.6.jar:5.3.6]
 	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:333) ~[spring-beans-5.3.6.jar:5.3.6]
 	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:157) ~[spring-beans-5.3.6.jar:5.3.6]
 	... 77 common frames omitted

Vi que se trata de um conflito entre Double e String, tbm vi que ele chama a atenção para as linhas 159, 172 e 531 da classe VendaView

Mas na classe View eu não vejo onde está o erro

vc poderia me ajudar a achar o erro?

Lucas_Camara

Pela mensagem:

Property type ‘java.lang.Double’ doesn’t match the field type ‘java.lang.String’. Binding should be configured manually using converter.

parece que vc deve configurar um converter no textfield para que ele possa entender o tipo double.

Segue link da documentação: https://vaadin.com/docs/v14/ce/components/collaboration-binder#converters

Tente implementar esse converter no textfield para o tipo Double.

R

Mano não consegui implementar este conversor…suspeito que o erro esteja aqui:

campoSomaValores.setValue(formatacao.format(venda.recuperarValorTotal()));

campoSomaValores é um TextField que só trabalha com Strings

na classe Venda tem este metodo:

public double recuperarValorTotal() {
	double valorTotal = 0;

	for (ProdutoVendido pv : produtos) {
		valorTotal += pv.getValorCalculado();
	}

	return valorTotal;
}
Lucas_Camara

É estranho pq formatacao.format serve exatamente para converter o double para uma String, ou seja, não deveria dar erro.

Tem que verificar outros textfields para ver se há algum que esteja recebendo um Double diretamente, sem está sendo convertido para String.

R

@Lucas_Camara

Bom dia mano, entre ontem e hj, tive um pequeno avanço, vamos lá:

este stack que estava dando ontem:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'br.com.fjsistemas.compra.venda.view.VendaView': Invocation of init method failed; nested exception is java.lang.IllegalStateException: Property type 'java.lang.Double' doesn't match the field type 'java.lang.String'. Binding should be configured manually using converter.
 	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:160) ~[spring-beans-5.3.6.jar:5.3.6]
 	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:422) ~[spring-beans-5.3.6.jar:5.3.6]
 	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1778) ~[spring-beans-5.3.6.jar:5.3.6]
 	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:602) ~[spring-beans-5.3.6.jar:5.3.6]
 	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) ~[spring-beans-5.3.6.jar:5.3.6]
 	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:314) ~[spring-beans-5.3.6.jar:5.3.6]
 	at com.vaadin.flow.spring.SpringInstantiator.getOrCreate(SpringInstantiator.java:117) ~[vaadin-spring-12.4.0.jar:na]
 	at com.vaadin.flow.di.Instantiator.createRouteTarget(Instantiator.java:165) ~[flow-server-2.6.3.jar:2.6.3]
 	at com.vaadin.flow.router.internal.AbstractNavigationStateRenderer.lambda$getRouteTarget$1(AbstractNavigationStateRenderer.java:139) ~[flow-server-2.6.3.jar:2.6.3]
 	at java.base/java.util.Optional.orElseGet(Optional.java:362) ~[na:na]
 	at com.vaadin.flow.router.internal.AbstractNavigationStateRenderer.getRouteTarget(AbstractNavigationStateRenderer.java:138) ~[flow-server-2.6.3.jar:2.6.3]
 	at com.vaadin.flow.router.internal.AbstractNavigationStateRenderer.sendBeforeEnterEventAndPopulateChain(AbstractNavigationStateRenderer.java:527) ~[flow-server-2.6.3.jar:2.6.3]
 	at com.vaadin.flow.router.internal.AbstractNavigationStateRenderer.createChainIfEmptyAndExecuteBeforeEnterNavigation(AbstractNavigationStateRenderer.java:507) ~[flow-server-2.6.3.jar:2.6.3]
 	at com.vaadin.flow.router.internal.AbstractNavigationStateRenderer.handle(AbstractNavigationStateRenderer.java:224) ~[flow-server-2.6.3.jar:2.6.3]
 	at com.vaadin.flow.router.Router.handleNavigation(Router.java:249) ~[flow-server-2.6.3.jar:2.6.3]
 	at com.vaadin.flow.router.Router.navigate(Router.java:220) ~[flow-server-2.6.3.jar:2.6.3]
 	at com.vaadin.flow.router.Router.lambda$initializeUI$caa7783a$1(Router.java:90) ~[flow-server-2.6.3.jar:2.6.3]
 	at com.vaadin.flow.server.communication.rpc.NavigationRpcHandler.handle(NavigationRpcHandler.java:68) ~[flow-server-2.6.3.jar:2.6.3]
 	at com.vaadin.flow.server.communication.ServerRpcHandler.handleInvocationData(ServerRpcHandler.java:412) ~[flow-server-2.6.3.jar:2.6.3]
 	at com.vaadin.flow.server.communication.ServerRpcHandler.lambda$handleInvocations$1(ServerRpcHandler.java:393) ~[flow-server-2.6.3.jar:2.6.3]
 	at java.base/java.util.ArrayList.forEach(ArrayList.java:1507) ~[na:na]
 	at com.vaadin.flow.server.communication.ServerRpcHandler.handleInvocations(ServerRpcHandler.java:393) ~[flow-server-2.6.3.jar:2.6.3]
 	at com.vaadin.flow.server.communication.ServerRpcHandler.handleRpc(ServerRpcHandler.java:320) ~[flow-server-2.6.3.jar:2.6.3]
 	at com.vaadin.flow.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:92) ~[flow-server-2.6.3.jar:2.6.3]
 	at com.vaadin.flow.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:40) ~[flow-server-2.6.3.jar:2.6.3]
 	at com.vaadin.flow.server.VaadinService.handleRequest(VaadinService.java:1570) ~[flow-server-2.6.3.jar:2.6.3]
 	at com.vaadin.flow.server.VaadinServlet.service(VaadinServlet.java:252) ~[flow-server-2.6.3.jar:2.6.3]
 	at com.vaadin.flow.spring.SpringServlet.service(SpringServlet.java:111) ~[vaadin-spring-12.4.0.jar:na]
 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.45.jar:4.0.FR]
 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
 	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:710) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
 	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:457) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
 	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:352) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
 	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:312) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
 	at org.springframework.web.servlet.mvc.ServletForwardingController.handleRequestInternal(ServletForwardingController.java:141) ~[spring-webmvc-5.3.6.jar:5.3.6]
 	at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:177) ~[spring-webmvc-5.3.6.jar:5.3.6]
 	at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:52) ~[spring-webmvc-5.3.6.jar:5.3.6]
 	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1060) ~[spring-webmvc-5.3.6.jar:5.3.6]
 	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962) ~[spring-webmvc-5.3.6.jar:5.3.6]
 	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.6.jar:5.3.6]
 	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) ~[spring-webmvc-5.3.6.jar:5.3.6]
 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:652) ~[tomcat-embed-core-9.0.45.jar:4.0.FR]
 	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.6.jar:5.3.6]
 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.45.jar:4.0.FR]
 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
 	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.45.jar:9.0.45]
 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
 	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.6.jar:5.3.6]
 	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.6.jar:5.3.6]
 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
 	at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.6.jar:5.3.6]
 	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.6.jar:5.3.6]
 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
 	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.6.jar:5.3.6]
 	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.6.jar:5.3.6]
 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
 	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
 	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
 	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
 	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
 	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
 	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
 	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
 	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
 	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
 	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
 	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
 	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
 	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
 	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
 	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
 	at java.base/java.lang.Thread.run(Thread.java:830) ~[na:na]
 Caused by: java.lang.IllegalStateException: Property type 'java.lang.Double' doesn't match the field type 'java.lang.String'. Binding should be configured manually using converter.
 	at com.vaadin.flow.data.binder.Binder.bindProperty(Binder.java:2930) ~[flow-data-2.6.3.jar:2.6.3]
 	at com.vaadin.flow.data.binder.Binder.lambda$null$26(Binder.java:2830) ~[flow-data-2.6.3.jar:2.6.3]
 	at com.vaadin.flow.data.binder.Binder.handleProperty(Binder.java:3019) ~[flow-data-2.6.3.jar:2.6.3]
 	at com.vaadin.flow.data.binder.Binder.lambda$bindInstanceFields$27(Binder.java:2828) ~[flow-data-2.6.3.jar:2.6.3]
 	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195) ~[na:na]
 	at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:177) ~[na:na]
 	at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:177) ~[na:na]
 	at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1621) ~[na:na]
 	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) ~[na:na]
 	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) ~[na:na]
 	at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913) ~[na:na]
 	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:na]
 	at java.base/java.util.stream.ReferencePipeline.reduce(ReferencePipeline.java:563) ~[na:na]
 	at com.vaadin.flow.data.binder.Binder.bindInstanceFields(Binder.java:2832) ~[flow-data-2.6.3.jar:2.6.3]
 	at br.com.fjsistemas.compra.venda.view.VendaView.configuraBinder(VendaView.java:531) ~[classes/:na]
 	at br.com.fjsistemas.compra.venda.view.VendaView.configuraTela(VendaView.java:172) ~[classes/:na]
 	at br.com.fjsistemas.compra.venda.view.VendaView.init(VendaView.java:159) ~[classes/:na]
 	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
 	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
 	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
 	at java.base/java.lang.reflect.Method.invoke(Method.java:567) ~[na:na]
 	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:389) ~[spring-beans-5.3.6.jar:5.3.6]
 	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:333) ~[spring-beans-5.3.6.jar:5.3.6]
 	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:157) ~[spring-beans-5.3.6.jar:5.3.6]
 	... 77 common frames omitted

Consegui eliminar ele criando um convert StringToDouble desta forma:

private void bindCampos() {
		binderVenda.forField(this.campoSomaValores).withConverter(new StringToDoubleConverter(0.0," ")).withNullRepresentation(0.0).bind(Venda::getValorTotalVenda, Venda::setValorTotalVenda);
		binderVenda.setBean(new Venda());
	}

Fui testar o programa, o 1º erro que percebi foi este:

mas até aqui nenhuma stack foi apresentada ou erro de compilação…prosseguindo

adicionei os produtos, embora o campo esteja “avermelhado” ele fez a soma corretamente e por fim clico em salvar

R

Lucas_Camara

O zero que está apresentando no campo, deve ser por causa disso no converter:

Não acho errado, pois se nada foi adicionado na venda, então o valor total é zero mesmo.


Sobre o valor total da venda que não está aparecendo, de onde está vindo o valor total que deveria preencher a coluna da tabela na tela?

R

então a grid está aqui:

grdVenda.addColumn(venda -> venda.getValorTotalVenda()).setHeader("Valor Total da Venda").setAutoWidth(true)
		.setKey("valorTotalVenda");

aqui é o campo onde os valores são somados

campoSomaValores.setValue(formatacao.format(venda.recuperarValorTotal()));

Lucas_Camara

Agora que vi o print do banco. O valor total não está mais sendo salvo. Tu tem que depurar o código no momento em que a venda é salva, para ver se o valor total está sendo preenchido corretamente.

R

fiz o debug

tenho este stack:

java.lang.NullPointerException
	at br.com.fjsistemas.compra.venda.view.VendaView.lambda$23(VendaView.java:429)
	at com.vaadin.flow.component.internal.AbstractFieldSupport.lambda$addValueChangeListener$828eca10$1(AbstractFieldSupport.java:98)
	at com.vaadin.flow.component.ComponentEventBus.fireEventForListener(ComponentEventBus.java:205)
	at com.vaadin.flow.component.ComponentEventBus.fireEvent(ComponentEventBus.java:194)
	at com.vaadin.flow.component.Component.fireEvent(Component.java:358)
	at com.vaadin.flow.component.ComponentUtil.fireEvent(ComponentUtil.java:386)
	at com.vaadin.flow.component.internal.AbstractFieldSupport.setValue(AbstractFieldSupport.java:209)
	at com.vaadin.flow.component.internal.AbstractFieldSupport.setValue(AbstractFieldSupport.java:135)
	at com.vaadin.flow.component.AbstractField.setValue(AbstractField.java:181)
	at com.vaadin.flow.component.combobox.ComboBox.setValue(ComboBox.java:345)
	at com.vaadin.flow.component.HasValue.clear(HasValue.java:179)
	at br.com.fjsistemas.compra.venda.view.VendaView.lambda$25(VendaView.java:498)
	at com.vaadin.flow.component.ComponentEventBus.fireEventForListener(ComponentEventBus.java:205)
	at com.vaadin.flow.component.ComponentEventBus.handleDomEvent(ComponentEventBus.java:373)
	at com.vaadin.flow.component.ComponentEventBus.lambda$addDomTrigger$dd1b7957$1(ComponentEventBus.java:264)
	at com.vaadin.flow.internal.nodefeature.ElementListenerMap.lambda$fireEvent$2(ElementListenerMap.java:443)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1507)
	at com.vaadin.flow.internal.nodefeature.ElementListenerMap.fireEvent(ElementListenerMap.java:443)
	at com.vaadin.flow.server.communication.rpc.EventRpcHandler.handleNode(EventRpcHandler.java:61)
	at com.vaadin.flow.server.communication.rpc.AbstractRpcInvocationHandler.handle(AbstractRpcInvocationHandler.java:66)
	at com.vaadin.flow.server.communication.ServerRpcHandler.handleInvocationData(ServerRpcHandler.java:412)
	at com.vaadin.flow.server.communication.ServerRpcHandler.lambda$handleInvocations$1(ServerRpcHandler.java:393)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1507)
	at com.vaadin.flow.server.communication.ServerRpcHandler.handleInvocations(ServerRpcHandler.java:393)
	at com.vaadin.flow.server.communication.ServerRpcHandler.handleRpc(ServerRpcHandler.java:320)
	at com.vaadin.flow.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:92)
	at com.vaadin.flow.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:40)
	at com.vaadin.flow.server.VaadinService.handleRequest(VaadinService.java:1570)
	at com.vaadin.flow.server.VaadinServlet.service(VaadinServlet.java:252)
	at com.vaadin.flow.spring.SpringServlet.service(SpringServlet.java:111)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:710)
	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:457)
	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:352)
	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:312)
	at org.springframework.web.servlet.mvc.ServletForwardingController.handleRequestInternal(ServletForwardingController.java:141)
	at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:177)
	at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:52)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1060)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:652)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
	at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.base/java.lang.Thread.run(Thread.java:830)

R

@Lucas_Camara

Fala mano, boa tarde, tudo bem contigo?

Mano consegui depois de muita luta fazer “praticamente tudo” funfar legal aqui

Na imagem abaixo o campo que estava em VARCHAR(255) agora está DOUBLE

E nesta próxima imagem o valor está sendo gravado corretamente:

mas agora está rolando um erro em tempo de execução, não impede o funcionamento da aplicação, mas é um erro e um erro deve ser corrigido…hehehe

Toda vez que clico em Add Produto:

o produto é adicionado corretamente na grid, mas da este erro em execução(lembrando que não impede o funcionamento da aplicação):

java.lang.NullPointerException
	at br.com.fjsistemas.compra.venda.view.VendaView.lambda$23(VendaView.java:426)
	at com.vaadin.flow.component.internal.AbstractFieldSupport.lambda$addValueChangeListener$828eca10$1(AbstractFieldSupport.java:98)
	at com.vaadin.flow.component.ComponentEventBus.fireEventForListener(ComponentEventBus.java:205)
	at com.vaadin.flow.component.ComponentEventBus.fireEvent(ComponentEventBus.java:194)
	at com.vaadin.flow.component.Component.fireEvent(Component.java:358)
	at com.vaadin.flow.component.ComponentUtil.fireEvent(ComponentUtil.java:386)
	at com.vaadin.flow.component.internal.AbstractFieldSupport.setValue(AbstractFieldSupport.java:209)
	at com.vaadin.flow.component.internal.AbstractFieldSupport.setValue(AbstractFieldSupport.java:135)
	at com.vaadin.flow.component.AbstractField.setValue(AbstractField.java:181)
	at com.vaadin.flow.component.combobox.ComboBox.setValue(ComboBox.java:345)
	at com.vaadin.flow.component.HasValue.clear(HasValue.java:179)
	at br.com.fjsistemas.compra.venda.view.VendaView.lambda$25(VendaView.java:495)
	at com.vaadin.flow.component.ComponentEventBus.fireEventForListener(ComponentEventBus.java:205)
	at com.vaadin.flow.component.ComponentEventBus.handleDomEvent(ComponentEventBus.java:373)
	at com.vaadin.flow.component.ComponentEventBus.lambda$addDomTrigger$dd1b7957$1(ComponentEventBus.java:264)
	at com.vaadin.flow.internal.nodefeature.ElementListenerMap.lambda$fireEvent$2(ElementListenerMap.java:443)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1507)
	at com.vaadin.flow.internal.nodefeature.ElementListenerMap.fireEvent(ElementListenerMap.java:443)
	at com.vaadin.flow.server.communication.rpc.EventRpcHandler.handleNode(EventRpcHandler.java:61)
	at com.vaadin.flow.server.communication.rpc.AbstractRpcInvocationHandler.handle(AbstractRpcInvocationHandler.java:66)
	at com.vaadin.flow.server.communication.ServerRpcHandler.handleInvocationData(ServerRpcHandler.java:412)
	at com.vaadin.flow.server.communication.ServerRpcHandler.lambda$handleInvocations$1(ServerRpcHandler.java:393)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1507)
	at com.vaadin.flow.server.communication.ServerRpcHandler.handleInvocations(ServerRpcHandler.java:393)
	at com.vaadin.flow.server.communication.ServerRpcHandler.handleRpc(ServerRpcHandler.java:320)
	at com.vaadin.flow.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:92)
	at com.vaadin.flow.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:40)
	at com.vaadin.flow.server.VaadinService.handleRequest(VaadinService.java:1570)
	at com.vaadin.flow.server.VaadinServlet.service(VaadinServlet.java:252)
	at com.vaadin.flow.spring.SpringServlet.service(SpringServlet.java:111)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:710)
	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:457)
	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:352)
	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:312)
	at org.springframework.web.servlet.mvc.ServletForwardingController.handleRequestInternal(ServletForwardingController.java:141)
	at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:177)
	at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:52)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1060)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:652)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
	at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.base/java.lang.Thread.run(Thread.java:830)

Fui ver a linha 426 da classe VendaView:

mas confesso que não sei o pq do erro…alguma ideia?

Lucas_Camara

Bem capaz que o event.getValue() esteja retornando NULL. Pode ser que esse txtProdutos não estivesse com um valor válido qdo o evento valueChangeListener foi acionado.

Criado 13 de julho de 2021
Ultima resposta 23 de jul. de 2021
Respostas 63
Participantes 2