Variable non interprétée sur play2 modèle
-
02-01-2020 - |
Question
J'ai un problème avec Play2 moteur de template.Certaines variables ne sont pas interprétées durant le processus de rendu.
La variable {clé.getKey} n'est pas interprété lorsqu'il a été reprise par des guillemets doubles.Comment je peux résoudre ce problème ?
JOUER 2.2.3 MODÈLE (index.scala.html)
@flash
@(if (flash.size > 0) {
flash.entrySet.iterator.map { key =>
<div class="row">
<div class="large-12 columns">
<div class="alert-box radius {key.getKey}" data-alert="">
{key.getKey.toUpperCase} — {key.getValue}
<a href="#" class="close">×</a>
</div>
</div>
</div>
}
})
SORTIE HTML:
{"success": "The item has been created"}
<div class="row">
<div class="large-12 columns">
<div class="alert-box radius {key.getKey}" data-alert="">
SUCCESS — The item has been created
<a href="#" class="close">×</a>
</div>
</div>
</div>
JOUER 2.2.3 MODÈLE (index.scala.html) avec @ variable
@flash
@(if (flash.size > 0) {
flash.entrySet.iterator.map { key =>
<div class="row">
<div class="large-12 columns">
<div class="alert-box radius @{key.getKey}" data-alert="">
{key.getKey.toUpperCase} — {key.getValue}
<a href="#" class="close">×</a>
</div>
</div>
</div>
}
})
SORTIE HTML:
{"success": "The item has been created"}
<div class="row">
<div class="large-12 columns">
<div class="alert-box radius @{key.getKey}" data-alert="">
SUCCESS — The item has been created
<a href="#" class="close">×</a>
</div>
</div>
</div>
La solution
EDIT: Comme il était difficile de savoir si c'était Scala ou Java précédemment, j'ai révisé ma réponse pour le travail avec le Jeu Java.
Il apparaît que les modèles de travail légèrement différente en Java, et les parenthèses autour de la if
déclaration gâcher les choses.Vous n'avez pas vraiment besoin de la if
déclaration de toute façon, comme le mappage d'un vide itérateur ne fait rien.Ceci fonctionne:
@flash.entrySet.iterator.map { key =>
<div class="row">
<div class="large-12 columns">
<div class="alert-box radius @{key.getKey}" data-alert="">
@{key.getKey.toUpperCase} — @{key.getValue}
<a href="#" class="close">×</a>
</div>
</div>
</div>
}
Et si vous voulez vraiment l' if
:
@if(flash.size > 0) {
(above code)
}