2
respostas

Validação de virgula para ponto no Spring e JPA

Estou precisando fazer uma validação, quando ao usuário digitar no salario uma virgula ele transforme em ponto, exemplo: 700,95, e ao mostrar essa informação em uma lista, e mostre com duas casa decimal, incluindo o zero, exemplo: 790,80.

e como faço para um campo do HTML receber só numero,virgula e ponto? e o campo nome receber só letras?

//Classe Pessoa do pacote modelo

package br.com.pessoa.modelo;

import java.util.Calendar;

import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size;

import org.springframework.format.annotation.DateTimeFormat;

@Entity public class Pessoa {

@Id @GeneratedValue(strategy=GenerationType.IDENTITY) private Integer id;

@NotNull @Size(min=5, message="{cadastra.pessoa.nome}") private String nome; private Integer idade; private String sexo; private String estadoCivil;

@DateTimeFormat(pattern="dd/MM/yyyy") private Calendar dataNascimento;

private Double altura; private float salario;

public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public Integer getIdade() { return idade; } public void setIdade(Integer idade) { this.idade = idade; } public String getSexo() { return sexo; } public void setSexo(String sexo) { this.sexo = sexo; } public String getEstadoCivil() { return estadoCivil; } public void setEstadoCivil(String estadoCivil) { this.estadoCivil = estadoCivil; } public Calendar getDataNascimento() { return dataNascimento; } public void setDataNascimento(Calendar dataNascimento) { this.dataNascimento = dataNascimento; } public Double getAltura() { return altura; } public void setAltura(Double altura) { this.altura = altura; } public float getSalario() { return salario; } public void setSalario(float salario) { this.salario = salario; }}

//Clase PessoaDao do pacote Dao

package br.com.pessoa.dao;

import java.util.List;

import javax.persistence.EntityManager; import javax.persistence.Query;

import br.com.pessoa.modelo.Pessoa; import br.com.pessoa.util.JPAUtil;

public class PessoaDao {

public void adiciona(Pessoa pessoa) {

EntityManager manager = new JPAUtil().getEntityManager();

manager.getTransaction().begin(); manager.persist(pessoa); manager.getTransaction().commit(); manager.close(); }

public void altera(Pessoa pessoa) {

EntityManager manager = new JPAUtil().getEntityManager();

manager.getTransaction().begin(); manager.merge(pessoa); manager.getTransaction().commit(); manager.close(); }

public void exclui(Pessoa pessoa) {

EntityManager manager = new JPAUtil().getEntityManager();

manager.getTransaction().begin(); Pessoa removerPessoa = manager.find(Pessoa.class, pessoa.getId()); manager.remove(removerPessoa); manager.getTransaction().commit(); manager.close(); }

public Pessoa listaId(Pessoa pessoa){

EntityManager manager = new JPAUtil().getEntityManager();

Pessoa pessoaId = manager.find(Pessoa.class, pessoa.getId()); manager.close();

return pessoaId; }

public List lista(){

EntityManager manager = new JPAUtil().getEntityManager();

Query query = manager.createQuery("select p from Pessoa p");

@SuppressWarnings("unchecked") List result = query.getResultList();

return result; }

public List listaPorParemetro(int id){

EntityManager manager = new JPAUtil().getEntityManager();

Query query = manager.createQuery("select p from Pessoa p where p.id=:pesId");

query.setParameter("pesId", id);

@SuppressWarnings("unchecked") List result = query.getResultList();

return result; } }

//Classe PessoaController do pacote controle

package br.com.pessoa.controle;

import java.util.List;

import javax.validation.Valid;

import org.springframework.stereotype.Controller; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView;

import br.com.pessoa.dao.PessoaDao; import br.com.pessoa.modelo.Pessoa;

@Controller public class PessoaController {

@RequestMapping("/home") public String principal(){ return "principal"; }

@RequestMapping("/formularioPessoa") public String formularioPessoa(){ return "formulario"; }

@RequestMapping("/adicionaPessoa") public String adicionaPessoa(@Valid Pessoa pessoa, BindingResult result){

if(result.hasErrors()){ return "formulario"; }

PessoaDao dao = new PessoaDao(); dao.adiciona(pessoa); return "redirect:listaPessoa"; }

@RequestMapping("/alteraPessoa") public String alteraPessoa(Pessoa pessoa){ PessoaDao dao = new PessoaDao(); dao.altera(pessoa); return "redirect:listaPessoa"; }

@RequestMapping("/excluiPessoa") public String excluiPessoa(Pessoa pessoa){ PessoaDao dao = new PessoaDao(); dao.exclui(pessoa); return "redirect:listaPessoa"; }

@RequestMapping("/listaPessoa") public ModelAndView listaPessoa(){ PessoaDao dao = new PessoaDao(); List pessoas = dao.lista();

ModelAndView mv = new ModelAndView("lista"); mv.addObject("todasPessoas", pessoas);

return mv; }

@RequestMapping("/buscaPessoa") public ModelAndView buscaPessoa(Pessoa pessoa){ PessoaDao dao = new PessoaDao(); Pessoa pessoaId = dao.listaId(pessoa);

ModelAndView mv = new ModelAndView("altera"); mv.addObject("pessoa", pessoaId);

return mv; } }

//Página de cadastro

<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html>

Home

Cadastro de pessoa

Nome
Idade
Sexo Selecionar Masculino Feminino
Estado Civil Selecionar Solteiro Casado Separado
Data Nascimeto:
Altura
Salario
2 respostas

Opa, para vc proibir entrada de dados num input, vc precisa usar um pouco de javascript.. Geralmente isso é feito com mascaras.. Vc pode procurar algum plugin do jquery para isso, para facilitar. Do lado do servidor, vc sempre vai guardar as informações de ponto flutante como BigDecimal..

Só tome cuidado, se vai chegar informação com "," do lado do servidor, vc vai precisar fazer uma conversão para o formato que o BigDecimal suporta, que é com "ponto".

Para exibir, vc pode usar taglib <fmt:formatNumber

Felipe não cheguei a ler seu código, mas vamos la, para realizar tais validações você pode utilizar o atributo pattern do HTML5 com expressões regulares, vamos ao exemplo:

Input com apenas letras:

<input pattern="^([A-Z]*)$">

Nesse caso será apenas letras mesmo não permitindo sequer espaços.

Permitir apenas numeros e virgulas:

<input pattern="^(\d{1,10})((\,)\d{1,2})?$">

Esse formato será para numeric(10,2) e para formatar com casas decimais você pode utilizar o fmt:formatNumber como o Alberto mencionou:

<input value="<fmt:formatNumber pattern="0.00" type="currency" value="${obj.valor}"/>">

Espero ter ajudado