2010-11-17 6 views
1

Est-il possible d'ajouter/mettre à jour plusieurs instances à la fois? Par exemple, nous avons un livre de classe de domaine avec bname, tile. Dans le fichier gsp, nous montrons un formulaire avec plusieurs noms de fichiers bname et title. Quelqu'un pourrait-il me laisser savoir comment écrire un crteate/modifier les actions?multi créer/modifier dans grails

Répondre

0

c'est possible. Vous devez créer des pages bulkCreate/bulkUpdate avec les méthodes de contrôleur et de service appropriées. Il n'y a rien pour vous empêcher de faire quelque chose comme ce qui suit dans un service:

def book1 = new Book(bname1, btitle1) 
def book2 = new Book(bname2, btitle2) 
book1.save() 
book2.save() 

Vous avez probablement besoin de validation là-dedans. bname1 etc. sont les paramètres que vous définissez dans votre formulaire.

+0

Merci hvgotcodes – Honey

0

utilisé le code ci-dessus dans une boucle et ont été en mesure d'ajouter/mettre à jour des enregistrements avec succès

for (i in 0..booksSize) { def book1 = new Livre (bname1, btitle1) if (! Book1 .save()) { flash.message = « erreur msg » }}

S'il y a des lignes avec des erreurs/données non valides comment afficher l'utilisateur les données saisies ainsi que les erreurs de suite/gsp? D'en haut, je ne reçois que la dernière erreur.

0

Je sais que c'est quelques années mais j'ai pensé que j'ajouterais une réponse mise à jour à cette question commune.

Grails fournit quelques outils pratiques pour permettre des mises à jour multi-enregistrements à l'aide des objets de commande, ListUtils et FactoryUtils.

Voici un exemple qui pourrait être utilisé pour enregistrer les entrées de décalage de carte de temps multiples:

class ShiftEntryListCommand { 
    List<ShiftEntryCommand> entries = ListUtils.lazyList(
      new ArrayList(), FactoryUtils.instantiateFactory(ShiftEntryCommand) 
    ) 
} 

class ShiftEntryCommand { 
    BigDecimal totalHours 
    Date date 
    String projectName 

    static constraints = { 
     totalHours (blank: false, min: 0.00, max: 24.00, matches: /^someRegex$/) 
     date (blank: false, matches: /^someRegex$/) 
     projectName (nullable: true, blank: true, matches: /^someRegex$/) 
    } 
} 

Vous créez essentiellement deux objets de commande. Un pour l'instance unique des données de formulaire, l'autre pour la liste des instances uniques. L'objet de commande list utilise ListUtils et FactoryUtils pour traiter l'entrée de formulaire "bulk" et chaque instance unique est toujours validée avec les contraintes.

Vous devez importer les ListUtils et FactoryUtils de la collection communes apache:

import org.apache.commons.collections.FactoryUtils 
import org.apache.commons.collections.ListUtils 

Il serait utilisé dans une action comme celle-ci:

def save(ShiftEntryListCommand cmd) { 
    //other action code follows ... 
} 

Maintenant toutes les données sous forme de vrac vient à la méthode de sauvegarde est traitée et validée par les objets de commande. Pour enregistrer les enregistrements, vous pouvez parcourir la liste et appeler le save() sur chacun d'eux ou utiliser une méthode Hybernate pour les insertions en masse. Dans notre cas, nous avons choisi de faire défiler chaque enregistrement. Pas certain de pourquoi.

Espérons que quelqu'un trouve cela utile.