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} &mdash; {key.getValue}
                        <a href="#" class="close">&times;</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 &mdash; The item has been created
                  <a href="#" class="close">&times;</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} &mdash; {key.getValue}
                        <a href="#" class="close">&times;</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 &mdash; The item has been created
                  <a href="#" class="close">&times;</a>
             </div>
        </div>
    </div>
Foi útil?

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} &mdash; @{key.getValue}
                <a href="#" class="close">&times;</a>
            </div>
        </div>
    </div>
}

E se você realmente quer o if:

@if(flash.size > 0) {
     (above code)
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top