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

È stato utile?

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

E se vuoi davvero il if:

@if(flash.size > 0) {
     (above code)
}
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top