Variável não interpretada no modelo play2
-
02-01-2020 - |
Pergunta
Tenho um problema com o mecanismo de modelo do Play2.Algumas variáveis não são interpretadas durante o processo de renderização.
A variável {key.getKey} não é interpretada quando foi colocada entre aspas duplas.Como posso resolver esse problema?
MODELO DE JOGO 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>
}
})
SAÍDA 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) com @ variável
@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>
}
})
SAÍDA 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>
Solução
EDITAR: Como não estava claro se era Scala ou Java anteriormente, revisei minha resposta para trabalhar com Play Java.
Parece que os modelos funcionam de maneira um pouco diferente em Java, e os parênteses em torno do if
declaração estavam bagunçando as coisas.Você realmente não precisa do if
declaração de qualquer maneira, já que mapear um iterador vazio não fará nada.Isso 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>
}
E se você realmente quer o if
:
@if(flash.size > 0) {
(above code)
}