Variable no interpretada en la plantilla play2
-
02-01-2020 - |
Pregunta
Tengo un problema con el motor de plantillas Play2.Algunas variables no se interpretan durante el proceso de renderizado.
La variable {key.getKey} no se interpreta cuando está entre comillas dobles.¿Cómo puedo solucionar este problema?
PLANTILLA DE JUEGO 2.2.3 (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>
}
})
SALIDA 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>
PLANTILLA PLAY 2.2.3 (index.scala.html) con 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>
}
})
SALIDA 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>
Solución
EDITAR: Como antes no estaba claro si se trataba de Scala o Java, revisé mi respuesta para que funcione con Play Java.
Parece que las plantillas funcionan ligeramente diferente en Java, y el paréntesis alrededor del if
declaración estaban arruinando las cosas.Realmente no necesitas el if
declaración de todos modos, ya que mapear un iterador vacío no hará nada.Esto funciona:
@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>
}
Y si realmente quieres el if
:
@if(flash.size > 0) {
(above code)
}