2013-01-24 1 views
-2

essentiellement le domaine pour sauver du respect de la virgule flottante, comme il le fait à un autre formatcomment peut enregistrer un double type correctement dans les grails?

i ont le domaine suivant

class Location { 
    double latitude 
    double longitude 
    static belongsTo=[ product: Product ] 
    static constraints = {  
     latitude nullable:false, blank:false 
     longitude nullable:false, blank:false  
    } 
} 

Vue:

<g:form class="form-horizontal" action="create" id="${locationInstance?.product?.id}" > 
    <fieldset> 
     <f:with bean="locationInstance"> 
      <f:field property="lat"/> 
      <f:field property="lon"/> 
     </f:with> 
    </fieldset> 
</g:form> 
<button type="button" class="submit btn btn-primary"> 
     <i class="icon-plus"></i> 
     <g:message code="default.add.label" args="[message(code: 'location.label', default:'Location')]" default="Add Map"/> 
</button> 

contrôleur:

import grails.converters.JSON 
class LocationController { 
    def create() { 
    def model = [productInstance:Product.findByIdAndUser(params.remove("id"),negoexService.currentUser)] 
    def responseReturn = [success:false] 
    def redirectParams = [controller:"product", action:"list"] 
    if (!model.productInstance) { 
     responseReturn.message = message(code: "default.not.found.message", args: [message(code: "product.label", default: "Product"), params.id]) 
    }else{ 
     redirectParams.action = "edit" 
     redirectParams.id = model.productInstance.id 
     params.product = model.productInstance 
     params.remove("action") 
     params.remove("controller") 
     model.locationInstance = new Location(params) 
     println params // here are showed 29.089177 and -110.961227 
     println model.locationInstance.lat // out is 2.9089177E7 
     println model.locationInstance.lon // out is -1.10961227E8 
     if(request.method=="POST"){ 
      if (model.locationInstance.save(flush: true)) { 
       responseReturn.success = true 
       responseReturn.message = message(code: "default.created.message", args: [message(code: "location.label", default: "Location"), model.locationInstance]) 
      }else{ 
       responseReturn.errors = model.locationInstance.errors.allErrors 
      } 
     } 
    } 
    withFormat { 
     html { 
      if(request.xhr && !model.productInstance){ 
       render view:"/messageAjax", model:responseReturn 
      }else{ 
       if(responseReturn.message){flash.message = responseReturn.message} 
       if(!model.productInstance || responseReturn.success){ 
        redirect redirectParams 
       }else{ 
        render view:"create"+(request.xhr?"Ajax":""), model:model 
       } 
      } 
     } 
     json {render responseReturn as JSON} 
     js {render responseReturn as JSON} 
     xml {render responseReturn as XML} 
    } 
} 

pour demander Location save()

les paramètres arrivent comme params.latitude = 29.089177 et params.longitude = -110.961227 après enregistrement les valeurs sont stockées comme locationInstance.latitude = 29089177 et locationInstance.longitude = -110961227 dans la base de données.

Pour être montré dans une vue apparaît comme la latitude et la longitude = 2.9089177E7 = -1.10961227E8

quel serait le problème, j'ai un autre projet avec classe thème et fonctionner correctement. et essayez de changer les noms des propriétés et le type à flotter et non résolu

Merci!

+0

Prêt! fondamentalement le domaine à sauver ne respecte pas le point flottant, car il le fait à un autre format, ce qui peut être? –

+0

Afficher les paramètres 'println 'réels –

Répondre

0

ajouter ceci dans le fichier conf/printemps/resources.groovy

beans = { 
    localeResolver(org.springframework.web.servlet.i18n.SessionLocaleResolver) { 
     defaultLocale = new Locale("es","MX") 
     java.util.Locale.setDefault(defaultLocale) 
    } 
} 

pour le format coordonnées persistent, et que les valeurs ne sont pas modifiées lors de l'enregistrement.

Questions connexes