2010-10-13 4 views
0

Je me suis débarrassé des offres originales UPDATE gsp Grails.Grails: Comment fonctionne la fonction UPDATE?

je l'ai mis dans la première rangée de ma table de list.gsp et changer toutes les valeurs de la table à g: textfield ils peuvent être modifiés sans aller au save.gsp

Mais maintenant, je suis essayer de le faire fonctionner, et je ne peux pas.

J'ai ajouté un bouton de mise à jour dans la dernière colonne de la ligne, de chaque ligne.

Quand je change les valeurs de g: textfields et cliquez sur le bouton de mise à jour, il me dit

Density #ID updated

mais les valeurs ne changent pas.

Je pense que je fais quelque chose de mal avec def mise à jour dans le contrôleur.

Voici le code:

def update = { 
     log.info "Entering Action ${actionUri}" 

     def densityInstance = Density.get(params.id) 
     if (densityInstance) { 

       if(params?.Rcommodity) { 
        println "${params.Rcommodity}" 

       } 
      if (params.version) { 
       def version = params.version.toLong() 
       if (densityInstance.version > version) { 

        densityInstance.errors.rejectValue("version", "default.optimistic.locking.failure", [message(code: 'density.label', default: 'Density')] as Object[], "Another user has updated this Density while you were editing") 
        render(view: "list", model: [densityInstance: densityInstance]) 
        return 
       } 
      } 
      densityInstance.properties = params 
      if (!densityInstance.hasErrors() && densityInstance.save(flush: true)) { 
       flash.message = "${message(code: 'default.updated.message', args: [message(code: 'density.label', default: 'Density'), densityInstance.id])}" 
       redirect(action: "list", id: densityInstance.id) 
      } 
      else { 
       redirect(action: "list", id: densityInstance.id) 
      } 
     } 
     else { 
      flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'density.label', default: 'Density'), params.id])}" 
      redirect(action: "list") 
     } 
    } 

Le Rcommodity est le nom des champs de texte créé, je mets un println pour voir si la valeur avait raison, maintenant je ne sais pas comment faire la valeur de le champ de texte est celui entré, il me donne la même valeur qu'il avait auparavant mais il me donne le message disant qu'il a été mis à jour. Le contrôleur est DensityController et le domaine est la densité

Toute aide serait grandement appréciée. Merci: D

Répondre

1

Regarde à partir du message flash en cours d'impression comme si l'instance était en cours de mise à jour (bien que le bit "#ID" semble étrange - avez-vous remplacé l'identifiant actuel?).

Il se pourrait que

densityInstance.properties = params 

est pas réellement une correspondance des les propriétés que, si aucune ne réellement changé avant la sauvegarde. Êtes-vous sûr d'avoir nommé vos champs de saisie gsp pour qu'ils correspondent aux noms de vos champs de classe Densité? Rcommodity est-il une propriété de Density, par exemple?

Peut aider à ajouter le bit de forme de votre page gsp, ainsi que la classe de domaine de densité.

+0

marchandise est une propriété de Densité, je devrais ajouter aussi des commodités ?? – randomizertech

+0

Désolé pour le délai - consultez la documentation 'Data Binding' (http://grails.org/doc/latest/guide/6.%20The%20Web%20Layer.html#6.1.6 Data Binding). Vos paramètres (définis à partir des noms d'entrée de formulaire gsp) devront correspondre aux propriétés densityInstances - je ne peux pas dire ce que vous les avez appelé, mais deviné à partir de l'une des lignes que vous avez collées ci-dessus. –

+0

Ok, mais disons que j'ai un champ dans la première ligne, où je les crée tous, avec le nom 'commodity', donc c'est déclaré dans le domaine. Alors le créé est 'Rcommodity', dois-je l'ajouter au domaine pour le mettre à jour ?? Est-ce ce que vous essayez de dire? – randomizertech

Questions connexes