Erro com user datatype: No matching editors or conversion strategy found
02/08/2016 09:09
1
Prezados,

Criei um DataType derivado de BigDecimal

package ejTypes

import java.math.BigDecimal
import java.math.MathContext
import java.math.RoundingMode
import java.text.DecimalFormat
import java.text.DecimalFormatSymbols

/**
* Created by PedroGentil on 21/03/2015.
*/
class Dinheiro extends BigDecimal {


public Dinheiro (java.math.BigDecimal bd) {
super(bd.setScale(2, RoundingMode.HALF_UP))
println ('Passou...')
}

public Dinheiro (Double d) {
super(d)
}

public Dinheiro (java.lang.String val) {
this(new BigDecimal(val).setScale(2, RoundingMode.HALF_UP));
}

public Dinheiro (java.lang.String val, MathContext mc) {
// RoundingMode.HALF_UP
this(new BigDecimal(val, mc).setScale(2, RoundingMode.HALF_UP));
}

public String toString() {
String lsRet = super.toString()
BigDecimal bd = super.setScale(2, RoundingMode.HALF_UP)
lsRet = DinheiroUserType.formatBd (bd)

return lsRet
}


}


Configurei:
1) DinheiroUserType.groovy implementando org.hibernate.usertype.UserType
2) DinheiroValueConverter.groovy implementando org.grails.databinding.converters.ValueConverter
3) DinheiroPropertyEditor estendendo java.beans.PropertyEditorSupport

etc.

O tipo dinheiro está com locale igual a pt_BR, com separador de decimais igual a ',' - vírgula  e separador de grupos igual a '.' - ponto.

Quando estou fazendo update de um domínio que tem um campo "valor do tipo Dinheiro", com valor = 1.234,89 (por exemplo), quando o programa passa por ScaleConstraint.java no trecho

?else if (propertyValue instanceof BigDecimal) {
bigDecimal = (BigDecimal) propertyValue;
bigDecimal = getScaledValue(bigDecimal);
bean.setPropertyValue(getPropertyName(), bigDecimal);
}


Como propertyValue está com ' 1.234,89', a primeira linha: bigDecimal = (BigDecimal) propertyValue;  dá erro.

Alguem saberia onde preciso indicar como esta conversão deve ser realizada?

Obrigado
Tags: Grails;BigDecima;UserType;Binding;No matching editors or conversion strategy found;ValueConverter;PropertyEditorSupport


0
Qual o erro  que da ?


0
Olá Evandro!
O erro é 
? ?URI/jobEasier/contrato/update/673
? ?Classjava.lang.IllegalStateExceptionMessage
? ?Cannot convert value of type [java.math.BigDecimal] to required type [ejTypes.Dinheiro] for property 'valor': no matching editors or conversion strategy found
02/08/2016 12:49


0
Amigão, o problema ta na vírgula do seu valor 1.234,89!

o BigDecimal não aceita valores customizados, logo você teria que dar algo semelhante a "1.234,89".replace (",",""); antes de dar update
ou garantir de outra formar que não venham vírgulas ,somente ponto! .

algo tipo

public Dinheiro (java.lang.String val) {
?val.replaceAll(",","");
this(new BigDecimal(val).setScale(2, RoundingMode.HALF_UP));
}


0
public Dinheiro (java.lang.String val) {
  ? ?val.replaceAll(",","");
this(new BigDecimal(val).setScale(2, RoundingMode.HALF_UP));
}

Essa "?" surgiu do além ai em cima


0
Olá Evandro,

A ideia aqui é exatamente ter um tipo derivado de BigDecimal que aceita esta máscara.

Já corrigi o problema. O que ocorre é que no Domain em que tenho um campo do tipo "Dinheiro" eu havia declarado na constraint correspondente 'scale: 2'. Isso forçava a entrada em ScaleConstraint.java e daí executava o código que dava erro, porque não aceitava a máscara e nem respeitava o converter.

Retirei esta declaração da constraint, e tudo passou a funcionar corretamente.

São interessantes as complexidades que envolvem cada detalhe do nosso bom Grails.

Obrigado!
03/08/2016 16:33


0
Beleza Pedro ! Que bom que conseguiu !


^^ o Grails descomplica! Quem complicou ai foi o BigDecimal!! kkkkkkkkkk


0
Então Evandro, como você faz para utilizar máscaras com a nossa notação pt_BR em seus campos de valor?
04/08/2016 13:38


0
Não uso. Na verdade tem um bommm tempo que to sem usar Grails.



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto