IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Play! Java Discussion :

Binding de collection


Sujet :

Play! Java

  1. #1
    Membre chevronné
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2006
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 645
    Par défaut Binding de collection
    Bonjour,

    Je début avec Play! et je me heurte à pas mal de choses. Notamment, ici, la récupération d'une collection.

    Pour situer le contexte, j'ai un sondage qui propose plusieurs choix :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    @Entity
    public class Poll extends Model {
     
        @Id
        public Long id;
     
        @Required
        public String title;
        public String description;
     
        @Valid
        public List<Choice> choices;
    }
    Le nombre de choix est inconnu et je génère à la volée les champs "qui vont bien" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    @(poll: Poll, pollForm: Form[Poll]))
     
    @import helper._
    @import helper.twitterBootstrap._
     
    @choiceGroup(field: Field, className: String = "choice") = {
        <div class="@className">
            <input name="label" placeholder="Choice"/>
            <a href="#" class="removeChoice btn btn-danger btn-mini"><i class="icon-white icon-remove-sign"></i> Remove</a>
        </div>
    }
     
    @main("Add choices") {
        <form method="post" action="/poll/addChoices/@poll.id">
            <fieldset>
                <legend>Choices</legend>
                <div id="choices">
                    @repeat(pollForm("choices")) { choice =>
                        @choiceGroup(choice)
                    }
     
                    @** Keep an hidden block that will be used as template for Javascript copy code **@
                    @choiceGroup(
                        pollForm("choices[x]"),
                        className = "choice_template"
                    )
     
                    <div class="manage">
                        <a class="addChoice btn btn-inverse btn-small">Add another choice</a>
                    </div>
                </div>
            </fieldset>
     
            <div class="actions">
                <input type="submit" class="btn btn-primary" value="Create" />
                <a href="/" class="btn btn-link">Cancel</a>
            </div>
        </form>
     
        <script type="text/javascript" charset="utf-8">
            $('.removeChoice').live('click', function(e) {
                $(this).parents('.choice').remove()
                renumber()
            })
     
            $('.addChoice').live('click', function(e) {
                var template = $('.choice_template')
                template.before('<div class="choice">' + template.html() + '</div>')
            })
     
            $('#form').submit(function() {
                $('.choice_template').remove()
            })
        </script>
    }
    J'aimerais récupérer ma collection de Choice mais le binding n'est pas aussi "automatique" que sur un objet simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        public static Result saveChoices(Long pollId) {
            Form<Poll> filledForm = pollForm.bindFromRequest();
            Poll poll = filledForm.get();
            PollService.saveChoices(pollId, poll.choices);
            return ok(index.render());
        }
    [IllegalStateException: No value] : Poll = filledForm.get().choices;
    Avez-vous un pointeur ou des suggestions pour faire ça "bien" ?

    Pour l'instant, j'utilise un Form<Poll> mais seule la collection m'intéresse réellement (le Poll est saisi à l'écran précédent).

    J'ai honte de poser des questions comme ça mais je rame un peu avec le manque de doc (compréhensible) de cette version 2.

    Merci et bonne journée !

    Alban

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2006
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 645
    Par défaut
    Plus ça va, plus le fait d'utiliser un Form<Poll> me semble stupide.
    Parce que tout ce que je veux, c'est une collection de Choice.

Discussions similaires

  1. Problème de binding sur Collection
    Par orelien dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 13/07/2015, 20h52
  2. Réponses: 0
    Dernier message: 22/06/2015, 15h35
  3. Binding listview Collection d'objets
    Par djmic dans le forum Windows Presentation Foundation
    Réponses: 6
    Dernier message: 23/08/2011, 21h33
  4. collection binding
    Par lucienkany dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 10/10/2005, 13h09
  5. []Erreur sur second emploi collection binding
    Par jacma dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 08/03/2004, 19h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo