Limpar Campos Formulário

Bom dia a todos!!!

Tenho um sistema de venda de produtos diversos, tela inicial:

Quando clico no botão Novo, abre-se uma janela:

Nesta segunda janela, o usuario preenche o nome do cliente, os demais campos são preenchidos automaticamente, o usuario tbm preenche a forma de pagamento, abaixo destes campos, coloquei uma grid, que ira receber as informações de cada produto escolhido.

Para selecionar os produtos o usuario clica em Adicionar Produtos, e então uma segunda janela se abre:

Nesta segunda janela tem um comboBox para selecionar o produto, um NumberField para definir a quantidade, o valor unitario é preenchido automaticamente no momento em que o produto é escolhido, e o valor total do item faz automaticamente a multiplicação entre quantidade e unitario.

Após escolher o produto o usuario vai clicar em Add Produto e o produto aparecera na grade…no momento em que o usuario clicar em Add Produto, a janela NÃO irá se fechar, pois ele poderá lançar um segundo ou mais produtos, e todos serão lançados na grid.

O meu problema é o seguinte, eu gostaria que cada vez que um produto fosse add na grid, o formulário fosse limpo, para o lançamento do segundo produto, e assim por diante, então fiz o código desta forma:

		btnAddProduto.addThemeVariants(ButtonVariant.LUMO_PRIMARY);
		btnAddProduto.getStyle().set("margin-top", "20px");
		btnAddProduto.addClickListener(e -> {

			produtoVendido.setProduto(txtProdutos.getValue());
			produtoVendido.setQuantidade(txtQuantidade.getValue().intValue());
			NumberFormat formatacao = NumberFormat.getCurrencyInstance(new Locale("pt", "BR"));
			try {
				produtoVendido
						.setValorTotalDoItem(formatacao.parse(txtValorTotalDoItem.getValue().toString()).doubleValue());
			} catch (ParseException e1) {
				
				e1.printStackTrace();
			}

			venda.addProduto(produtoVendido.getProduto(), produtoVendido.getQuantidade(),
					produtoVendido.getProduto().getValor(), produtoVendido.getValorTotalDoItem());

			addClickModal();
			
			grid.getDataProvider().refreshAll();
			
			txtProdutos.clear();
			txtQuantidade.clear();
			txtValorUnitario.clear();
			txtValorTotalDoItem.clear();
		

		});

Mas após clicar em Add Produto, somente os campos produto e quantidade são limpos, o valor unitário e total do item permanecem com os dados:

gostaria de saber, onde posso estar errando? Obg desde já!

o eclipse apresenta este erro, toda vez que clico em Add Produto:

    java.lang.NullPointerException
	at br.com.fjsistemas.compraVenda.VendaView.lambda$23(VendaView.java:426)
	at com.vaadin.flow.component.internal.AbstractFieldSupport.lambda$addValueChangeListener$828eca10$1(AbstractFieldSupport.java:96)
	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:359)
	at com.vaadin.flow.component.ComponentUtil.fireEvent(ComponentUtil.java:386)
	at com.vaadin.flow.component.internal.AbstractFieldSupport.setValue(AbstractFieldSupport.java:207)
	at com.vaadin.flow.component.internal.AbstractFieldSupport.setValue(AbstractFieldSupport.java:133)
	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.compraVenda.VendaView.lambda$25(VendaView.java:487)
	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:441)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1507)
	at com.vaadin.flow.internal.nodefeature.ElementListenerMap.fireEvent(ElementListenerMap.java:441)
	at com.vaadin.flow.server.communication.rpc.EventRpcHandler.handleNode(EventRpcHandler.java:59)
	at com.vaadin.flow.server.communication.rpc.AbstractRpcInvocationHandler.handle(AbstractRpcInvocationHandler.java:64)
	at com.vaadin.flow.server.communication.ServerRpcHandler.handleInvocationData(ServerRpcHandler.java:409)
	at com.vaadin.flow.server.communication.ServerRpcHandler.lambda$handleInvocations$1(ServerRpcHandler.java:390)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1507)
	at com.vaadin.flow.server.communication.ServerRpcHandler.handleInvocations(ServerRpcHandler.java:390)
	at com.vaadin.flow.server.communication.ServerRpcHandler.handleRpc(ServerRpcHandler.java:317)
	at com.vaadin.flow.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:89)
	at com.vaadin.flow.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:40)
	at com.vaadin.flow.server.VaadinService.handleRequest(VaadinService.java:1547)
	at com.vaadin.flow.server.VaadinServlet.service(VaadinServlet.java:247)
	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:231)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:712)
	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:459)
	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:231)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	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:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	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:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	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:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	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:343)
	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:888)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1597)
	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)
2021-05-24 08:23:40.754 ERROR 10168 --- [nio-8080-exec-8] c.v.flow.server.DefaultErrorHandler      : 

java.lang.NullPointerException: null
	at br.com.fjsistemas.compraVenda.VendaView.lambda$24(VendaView.java:442) ~[classes/:na]
	at com.vaadin.flow.component.internal.AbstractFieldSupport.lambda$addValueChangeListener$828eca10$1(AbstractFieldSupport.java:96) ~[flow-server-2.4.6.jar:2.4.6]
	at com.vaadin.flow.component.ComponentEventBus.fireEventForListener(ComponentEventBus.java:205) ~[flow-server-2.4.6.jar:2.4.6]
	at com.vaadin.flow.component.ComponentEventBus.fireEvent(ComponentEventBus.java:194) ~[flow-server-2.4.6.jar:2.4.6]
	at com.vaadin.flow.component.Component.fireEvent(Component.java:359) ~[flow-server-2.4.6.jar:2.4.6]
	at com.vaadin.flow.component.ComponentUtil.fireEvent(ComponentUtil.java:386) ~[flow-server-2.4.6.jar:2.4.6]
	at com.vaadin.flow.component.internal.AbstractFieldSupport.setValue(AbstractFieldSupport.java:207) ~[flow-server-2.4.6.jar:2.4.6]
	at com.vaadin.flow.component.internal.AbstractFieldSupport.setValue(AbstractFieldSupport.java:133) ~[flow-server-2.4.6.jar:2.4.6]
	at com.vaadin.flow.component.AbstractField.setValue(AbstractField.java:181) ~[flow-server-2.4.6.jar:2.4.6]
	at com.vaadin.flow.component.textfield.AbstractNumberField.setValue(AbstractNumberField.java:292) ~[vaadin-text-field-flow-2.3.5.jar:na]
	at com.vaadin.flow.component.textfield.AbstractNumberField.setValue(AbstractNumberField.java:39) ~[vaadin-text-field-flow-2.3.5.jar:na]
	at com.vaadin.flow.component.HasValue.clear(HasValue.java:179) ~[flow-server-2.4.6.jar:2.4.6]
	at br.com.fjsistemas.compraVenda.VendaView.lambda$25(VendaView.java:488) ~[classes/:na]
	at com.vaadin.flow.component.ComponentEventBus.fireEventForListener(ComponentEventBus.java:205) ~[flow-server-2.4.6.jar:2.4.6]
	at com.vaadin.flow.component.ComponentEventBus.handleDomEvent(ComponentEventBus.java:373) ~[flow-server-2.4.6.jar:2.4.6]
	at com.vaadin.flow.component.ComponentEventBus.lambda$addDomTrigger$dd1b7957$1(ComponentEventBus.java:264) ~[flow-server-2.4.6.jar:2.4.6]
	at com.vaadin.flow.internal.nodefeature.ElementListenerMap.lambda$fireEvent$2(ElementListenerMap.java:441) ~[flow-server-2.4.6.jar:2.4.6]
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1507) ~[na:na]
	at com.vaadin.flow.internal.nodefeature.ElementListenerMap.fireEvent(ElementListenerMap.java:441) ~[flow-server-2.4.6.jar:2.4.6]
	at com.vaadin.flow.server.communication.rpc.EventRpcHandler.handleNode(EventRpcHandler.java:59) ~[flow-server-2.4.6.jar:2.4.6]
	at com.vaadin.flow.server.communication.rpc.AbstractRpcInvocationHandler.handle(AbstractRpcInvocationHandler.java:64) ~[flow-server-2.4.6.jar:2.4.6]
	at com.vaadin.flow.server.communication.ServerRpcHandler.handleInvocationData(ServerRpcHandler.java:409) ~[flow-server-2.4.6.jar:2.4.6]
	at com.vaadin.flow.server.communication.ServerRpcHandler.lambda$handleInvocations$1(ServerRpcHandler.java:390) ~[flow-server-2.4.6.jar:2.4.6]
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1507) ~[na:na]
	at com.vaadin.flow.server.communication.ServerRpcHandler.handleInvocations(ServerRpcHandler.java:390) ~[flow-server-2.4.6.jar:2.4.6]
	at com.vaadin.flow.server.communication.ServerRpcHandler.handleRpc(ServerRpcHandler.java:317) ~[flow-server-2.4.6.jar:2.4.6]
	at com.vaadin.flow.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:89) ~[flow-server-2.4.6.jar:2.4.6]
	at com.vaadin.flow.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:40) ~[flow-server-2.4.6.jar:2.4.6]
	at com.vaadin.flow.server.VaadinService.handleRequest(VaadinService.java:1547) ~[flow-server-2.4.6.jar:2.4.6]
	at com.vaadin.flow.server.VaadinServlet.service(VaadinServlet.java:247) ~[flow-server-2.4.6.jar:2.4.6]
	at com.vaadin.flow.spring.SpringServlet.service(SpringServlet.java:111) ~[vaadin-spring-12.3.2.jar:na]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.41.jar:4.0.FR]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[tomcat-embed-core-9.0.41.jar:9.0.41]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41]
	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:712) ~[tomcat-embed-core-9.0.41.jar:9.0.41]
	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:459) ~[tomcat-embed-core-9.0.41.jar:9.0.41]
	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:352) ~[tomcat-embed-core-9.0.41.jar:9.0.41]
	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:312) ~[tomcat-embed-core-9.0.41.jar:9.0.41]
	at org.springframework.web.servlet.mvc.ServletForwardingController.handleRequestInternal(ServletForwardingController.java:141) ~[spring-webmvc-5.3.3.jar:5.3.3]
	at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:177) ~[spring-webmvc-5.3.3.jar:5.3.3]
	at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:52) ~[spring-webmvc-5.3.3.jar:5.3.3]
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1060) ~[spring-webmvc-5.3.3.jar:5.3.3]
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962) ~[spring-webmvc-5.3.3.jar:5.3.3]
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.3.jar:5.3.3]
	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) ~[spring-webmvc-5.3.3.jar:5.3.3]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:652) ~[tomcat-embed-core-9.0.41.jar:4.0.FR]
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.3.jar:5.3.3]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.41.jar:4.0.FR]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[tomcat-embed-core-9.0.41.jar:9.0.41]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41]
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.41.jar:9.0.41]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41]
	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.3.jar:5.3.3]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.3.jar:5.3.3]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41]
	at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.3.jar:5.3.3]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.3.jar:5.3.3]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41]
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.3.jar:5.3.3]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.3.jar:5.3.3]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41]
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) ~[tomcat-embed-core-9.0.41.jar:9.0.41]
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[tomcat-embed-core-9.0.41.jar:9.0.41]
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) ~[tomcat-embed-core-9.0.41.jar:9.0.41]
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143) ~[tomcat-embed-core-9.0.41.jar:9.0.41]
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[tomcat-embed-core-9.0.41.jar:9.0.41]
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[tomcat-embed-core-9.0.41.jar:9.0.41]
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) ~[tomcat-embed-core-9.0.41.jar:9.0.41]
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374) ~[tomcat-embed-core-9.0.41.jar:9.0.41]
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.41.jar:9.0.41]
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:888) ~[tomcat-embed-core-9.0.41.jar:9.0.41]
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1597) ~[tomcat-embed-core-9.0.41.jar:9.0.41]
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.41.jar:9.0.41]
	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.41.jar:9.0.41]
	at java.base/java.lang.Thread.run(Thread.java:830) ~[na:na]

Fui verificas as linhas 426 e 442

426: txtValorUnitario.setValue(formatter.format(event.getValue().getValor()));

442: valorTotal = formatter.parse(txtValorUnitario.getValue()).doubleValue() * txtQuantidade.getValue();

A linha 426 a variavel txtValorUnitario recebe o valor e faz a formatação para “0.000,00”

A linha 442 a variavel valorTotal faz a multiplicação de quantidade por unitario e formata o resultado para “0.000,00”

acho estranho estar nulo, uma vez que ele está executando da maneira correta(na parte visual, pelo menos):

Tentei substituir isso:

txtProdutos.clear();
txtQuantidade.clear();
txtValorUnitario.clear();
txtValorTotalDoItem.clear();

por isso:

binderProdutoVendido.getFields().forEach(f -> f.clear());

desta forma o NullPointerException deixa de existir, porem os campos continuam sem serem limpos

Alguém para ajudar?

Fez um debug pra ver o que estava null e causando o erro?

1 curtida

@RoinujNosde

sim fiz:

mas confesso que:

1º não sei se o breakpoint está no lugar certo
2º não sei interpretar o debug

O breakpoint seria próximo a linha que deu erro.
E no canto superior direito tem “> this”.
Só clicar na seta para navegar pelas variáveis e verificar se tem alguma null.

1 curtida

@RoinujNosde

eu consegui resolver a questão de limpar o formulário, mas cai em outros 3 problemas

na janela onde adiciono os produtos

veja na imagem acima que não lancei nenhum produto, então vou lançar o 1º

Primeiro Problema:

segundo Problema:

Após adicionar o 1º produto o formulario é limpo:

então vou add o 2º produto:

3º problema

após adicionar o segundo produto

Onde vc está fazendo a soma dos valores dos produtos? E como vc está atribuindo esse valor ao campo Valor Total?

1 curtida

@Lucas_Camara então eu acabei de “consertar” o 1º problema, vou atualizar como está agora

1º Problema:

	private void janelaModalVendas() {

		binderProdutoVendido.setBean(new ProdutoVendido());
		modalVendas.open();
		modalVendas.setHeight("420px");
		modalVendas.setWidth("500px");

		List<Produto> listaDeProdutos = produtoRepository.findAll();
		txtProdutos.setItemLabelGenerator(Produto::getNome);
		txtProdutos.setItems(listaDeProdutos);
		txtProdutos.addValueChangeListener(event -> {

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

			try {

				txtValorUnitario.setValue(formatter.format(event.getValue().getValor()));

			} catch (Exception e) {
				e.printStackTrace();
			}

		});

		txtQuantidade.setHasControls(true);
		txtQuantidade.setValue(null);
		txtQuantidade.setMin(1);
		txtQuantidade.addValueChangeListener(event -> {

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

			double valorTotal = 0;

			try {
				if (txtValorUnitario.getValue() != null && txtQuantidade.getValue() != null) {
					valorTotal = formatter.parse(txtValorUnitario.getValue()).doubleValue() * txtQuantidade.getValue();
				}
			} catch (ParseException e) {

				e.printStackTrace();
			}

			txtValorTotalDoItem.setValue(formatter.format(valorTotal));

			for (TextField tf : valores) {
				try {
					soma += formatter.parse(tf.getValue()).doubleValue();

				} catch (ParseException e) {

					e.printStackTrace();
				}

			}

		});

		btnAddProduto.addThemeVariants(ButtonVariant.LUMO_PRIMARY);
		btnAddProduto.getStyle().set("margin-top", "20px");
		btnAddProduto.addClickListener(e -> {
			ProdutoVendido produtoVendido = binderProdutoVendido.getBean();
			produtoVendido.setProduto(txtProdutos.getValue());
			produtoVendido.setQuantidade(txtQuantidade.getValue().intValue());
			NumberFormat formatacao = NumberFormat.getCurrencyInstance(new Locale("pt", "BR"));
			try {
				produtoVendido
						.setValorTotalDoItem(formatacao.parse(txtValorTotalDoItem.getValue().toString()).doubleValue());
			} catch (ParseException e1) {

				e1.printStackTrace();
			}

			venda.addProduto(produtoVendido.getProduto(), produtoVendido.getQuantidade(),
					produtoVendido.getProduto().getValor(), produtoVendido.getValorTotalDoItem());

			addClickModal();
			grid.getDataProvider().refreshAll();
			campoSomaValores.setValue(formatacao.format(soma));//aqui é o campo valor total
			binderProdutoVendido.setBean(new ProdutoVendido());
			txtProdutos.clear();
			txtQuantidade.clear();
			txtValorUnitario.clear();
			txtValorTotalDoItem.clear();

		});

Agora vou te mostrar o quanto foi importante fazermos o esquema de adicionar os produtos à venda através do método addProduto.

Aqui começa algo mais próximo da orientação à objetos.

Como agora, no seu sistema, vc tem uma Venda, e cada venda pode ter vários Produtos, vc pode pedir para a venda o valor total de produtos que foram adicionados.

Em vez de fazer um FOR em cima de todos os Textfields como vc fez, vc pode criar um método na classe Venda que retorne o valor total dos produtos adicionados:

public double recuperarValorTotal() {
	double valorTotal = 0;
	
	for (ProdutoVendido pv : produtos) {
		Produto produto = pv.getProduto();
		valorTotal += produto.getValor() * pv.getQuantidade();
	}
	
	return valorTotal;
}

Com esse método, basta vc chamá-lo e setar no campo da tela:

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

Sacou?

1 curtida

Só uma pequena correção: tem que multiplicar pela quantidade tbm.

2 curtidas

@RoinujNosde Verdade. Vou editar o método. Vlw!


@rafaspara2017 e se quiser, dá para ter também um método na classe ProdutoVendido que já retorne o valor calculado baseado na quantidade:

Classe ProdutoVendido

public double getValorCalculado() {
	return produto.getValor() * quantidade;
}

E usar esse método no cálculo do valor total na classe Venda:

public double recuperarValorTotal() {
	double valorTotal = 0;
	
	for (ProdutoVendido pv : produtos) {
		valorTotal += pv.getValorCalculado();
	}
	
	return valorTotal;
}
1 curtida

@Lucas_Camara

Então na classe Venda ficou assim:

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;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
@Data
@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 String 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;
	}

}

E na classe ProdutoVendido, ficou assim:

package br.com.fjsistemas.backend;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@AllArgsConstructor
@NoArgsConstructor
@Data
@Getter
@Setter
@Entity
public class ProdutoVendido {

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

	@ManyToOne
	private Venda venda;

	@ManyToOne
	private Produto produto;

	private Integer quantidade;
	private Double valorTotalDoItem;
	
	public double getValorCalculado() {
		return produto.getValor() * quantidade;
	}

}

e como deve ficar a VendaView?

Substitua essa linha:

campoSomaValores.setValue(formatacao.format(soma));//aqui é o campo valor total

Por:

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

@Lucas_Camara funcionou quase perfeitamente…rs

Visualmente falando, tudo perfeito, tudo está funcionando corretamente. MASSSS toda vez que o usuario clicar em Add Produto da este stack(que não impede o funcionamento do sistema):

java.lang.NullPointerException
	at br.com.fjsistemas.compraVenda.VendaView.lambda$23(VendaView.java:424)
	at com.vaadin.flow.component.internal.AbstractFieldSupport.lambda$addValueChangeListener$828eca10$1(AbstractFieldSupport.java:96)
	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:359)
	at com.vaadin.flow.component.ComponentUtil.fireEvent(ComponentUtil.java:386)
	at com.vaadin.flow.component.internal.AbstractFieldSupport.setValue(AbstractFieldSupport.java:207)
	at com.vaadin.flow.component.internal.AbstractFieldSupport.setValue(AbstractFieldSupport.java:133)
	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.compraVenda.VendaView.lambda$25(VendaView.java:487)
	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:441)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1507)
	at com.vaadin.flow.internal.nodefeature.ElementListenerMap.fireEvent(ElementListenerMap.java:441)
	at com.vaadin.flow.server.communication.rpc.EventRpcHandler.handleNode(EventRpcHandler.java:59)
	at com.vaadin.flow.server.communication.rpc.AbstractRpcInvocationHandler.handle(AbstractRpcInvocationHandler.java:64)
	at com.vaadin.flow.server.communication.ServerRpcHandler.handleInvocationData(ServerRpcHandler.java:409)
	at com.vaadin.flow.server.communication.ServerRpcHandler.lambda$handleInvocations$1(ServerRpcHandler.java:390)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1507)
	at com.vaadin.flow.server.communication.ServerRpcHandler.handleInvocations(ServerRpcHandler.java:390)
	at com.vaadin.flow.server.communication.ServerRpcHandler.handleRpc(ServerRpcHandler.java:317)
	at com.vaadin.flow.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:89)
	at com.vaadin.flow.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:40)
	at com.vaadin.flow.server.VaadinService.handleRequest(VaadinService.java:1547)
	at com.vaadin.flow.server.VaadinServlet.service(VaadinServlet.java:247)
	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:231)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:712)
	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:459)
	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:231)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	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:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	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:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	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:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	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:343)
	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:888)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1597)
	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)