BigDecimal - Somando valores

2 respostas
javaweb
FredericoQR

Pessoal, estou tentando somar os valores adicionados na coluna “Valor”, ou seja, a cada inserção de uma receita o campo total abaixo precisa atualizar fazendo a soma dos valores na coluna valor, porem estou com o tipo BigDecimal, sendo assim não consigo fazer a soma.

Model:

@NotNull
@DecimalMin("0")
@Column(precision = 10, scale = 2, nullable = false)
private BigDecimal valor;

get e set

Este método esta na classe Lancamento (model)

@Transient
public void valorTotal(Lancamento lancamento) {
	BigDecimal total = BigDecimal.ZERO;
	total = total.add(this.getValor());
	this.setValor(total);
}

Enum

RECEITA("Receita"), 
DESPESA("Despesa");

get e set

Na View:

<p:dataTable value="#{consultaLancamentosBean.lancamentos}" var="lancamento">

<p:column>
<p:outputLabel value="Total RECEITA:" style="font-weight: bold; text-align: right; font-size: 1.1em" />
	<h:outputText id="totalReceita" value="#{lancamento.valorTotal(lancamento)}"
		style="font-weight: bold; font-size: 1.1em">
		<f:convertNumber type="currency" />
	</h:outputText>
</p:column>

2 Respostas

staroski

Você sempre está somando ZERO com o valor atual, ou seja, nunca vai mudar.

Creio que você queira fazer isso:

public void valorTotal(Lancamento lancamento) {
    BigDecimal total = getValor(); // meu valor atual
    total = total.add(lancamento.getValor()); // somo o valor do lançamento recebido
    setValor(total); // atualizo meu valor total
}

Ou, de forma mais reduzida:

public void valorTotal(Lancamento lancamento) {
    setValor(getValor().add(lancamento.getValor()));
}
FredericoQR

Staroski, vou fazer o teste do método, porém no view, eu não consigo buscar o valor para exibir na tela, no caso so aparece a string value=“Total RECEITA”, esse método deveria ficar no bean? Neste método, como ele vai saber quando é receita quando é despesa (Enum)

Exibi.
<p:outputLabel value="Total RECEITA: />

Não exibi o valorTotal
<h:outputText value="#{lancamento.valorTotal(lancamento)}" />
Criado 24 de junho de 2019
Ultima resposta 25 de jun. de 2019
Respostas 2
Participantes 2