Variabile non interpretato sul modello Play2
-
02-01-2020 - |
Domanda
Ho un problema con il motore Play2 Template.Alcune variabili non sono interpretate durante il processo di rendering.
La variabile {key.getKey} non è interpretata quando è stato consegnato con doppia citazione.Come posso risolvere questo problema?
PLAY 2.2.3 Template (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>
}
})
.
Uscita 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>
.
PLAY 2.2.3 Template (index.scala.html) con @ variabile
@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>
}
})
.
Uscita 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>
. Soluzione
Modifica: Come non è chiaro se questa fosse Scala o Java prima, ho rivisto la mia risposta al lavoro con Java Java.
Sembra che i modelli funzionino leggermente diversi in Java e la parentesi attorno alla dichiarazione if
stava incasinando le cose.Non hai davvero bisogno della dichiarazione if
comunque, poiché la mappatura di un iteratore vuoto non farà nulla.Questo funziona:
@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>
}
.
E se vuoi davvero il if
:
@if(flash.size > 0) {
(above code)
}
.