2010-10-11 5 views
0

J'ai le créer dans la table/liste que Grails fournit.Grails: Comment faire un bouton SAVE dans la même table et le faire fonctionner?

Voici une photo de ce que j'ai

http://i56.tinypic.com/25jwmdf.jpg

Comme vous pouvez le voir, je crée tout sur la première ligne de ma table, puis de la 2ème ligne et sur la liste réelle.

Dans la dernière colonne de la 2ème ligne, vous pouvez voir que j'ai le bouton UPDATE et un bouton Supprimer.

Le bouton de suppression semble fonctionner correctement, mais j'ai des problèmes avec le bouton UPDATE.

Voici le code de cette dernière colonne

<g:form> 
    <g:hiddenField name="id" value="${densityInstance?.id}" /> 
    <g:actionSubmit class="editar" action="update" value="${message(code: 'default.button.editar.label', default: '&nbsp;&nbsp;&nbsp;')}" /> 
    <g:actionSubmit class="eliminar" action="delete" value="${message(code: 'default.button.eliminar.label', default: '&nbsp;&nbsp;&nbsp;')}" onclick="return confirm('${message(code: 'default.button.delete.confirm.message', default: 'Are you sure you want to delete?')}');" /> 
</g:form> 

Et voici ce que j'ai pour la suppression et la mise à jour dans le contrôleur

def delete = { 
    def densityInstance = Density.get(params.id) 
    if (densityInstance) { 
     try { 
      densityInstance.delete(flush: true) 
      flash.message = "${message(code: 'default.deleted.message', args: [message(code: 'density.label', default: 'Density'), params.id])}" 
      redirect(action: "list") 
     } 
     catch (org.springframework.dao.DataIntegrityViolationException e) { 
      flash.message = "${message(code: 'default.not.deleted.message', args: [message(code: 'density.label', default: 'Density'), params.id])}" 
      redirect(action: "show", id: params.id) 
     } 
    } 
    else { 
     flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'density.label', default: 'Density'), params.id])}" 
     redirect(action: "list") 
    } 
} 

Le SUPPRIMER semble fonctionner très bien, et ici est le UPDATE, (peut-être est le défaut SAVE que j'ai besoin de modifier, je ne suis pas si sûr et c'est pourquoi je demande:

Voici la mise à jour:

def update = { 
    def densityInstance = Density.get(params.id) 
    if (densityInstance) { 
     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 { 
      render(view: "list", model: [densityInstance: densityInstance]) 
     } 
    } 
    else { 
     flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'density.label', default: 'Density'), params.id])}" 
     redirect(action: "list") 
    } 
} 

Merci d'avance!

+0

Le bouton Modifier/enregistrer est-il destiné à une ligne spécifique ou à toutes les lignes en même temps? – Ruben

+0

Une ligne à la fois ... Toutes les lignes créées ont un bouton d'édition/sauvegarde et un autre à la fin de la ligne dans la dernière colonne – randomizertech

Répondre

2

Le g:form que vous avez est seulement sur la colonne de la table finale, avec un paramètre caché de formulaire, l'id. Supprimer les travaux, car tout ce dont il a besoin est un identifiant. La mise à jour nécessite le reste des entrées de formulaire. Les champs modifiables ont chacun une entrée de formulaire, mais ils ne sont pas inclus dans ce g:form, donc leurs données ne sont pas soumises avec le formulaire.

Vous devez placer le g:form dans toutes les colonnes de la ligne du tableau. Par exemple:

<g:form> 
    <tr> 
    <td>${densityInstance?.id}<g:hiddenField name="id" value="${densityInstance?.id}" /></td> 
    <td><g:textField name="commodity" value="${...}"/></td> 
    ... 
    <td> 
     <g:actionSubmit class="editar" action="update" value="${message(code: 'default.button.editar.label', default: '&nbsp;&nbsp;&nbsp;')}" /> 
     <g:actionSubmit class="eliminar" action="delete" value="${message(code: 'default.button.eliminar.label', default: '&nbsp;&nbsp;&nbsp;')}" onclick="return confirm('${message(code: 'default.button.delete.confirm.message', default: 'Are you sure you want to delete?')}');" /> 
    </td> 
    </tr> 
</g:form> 
+0

Non, cela ne fonctionne pas correctement. Je suis assez sûr que l'erreur est dans le contrôleur dans la mise à jour def {} – randomizertech

+0

Je reçois un message disant Density 1 mis à jour – randomizertech

+0

Essayez printlning params (ou regardez-le dans un débogueur) au début de 'update'. Contient-il les valeurs mises à jour? – ataylor

Questions connexes