2012-03-17 12 views
27

Il mio codice nel modello di scala:partita in caso modello scala non funziona, in play2

@session.get("user.id") match { 
    case Some(_) => "xx" 
    case _ => "yy" 
} 
<a href="">Logout</a> 

Ma la case ... essere visualizzati direttamente alla pagina html generato:

match { case Some(_) => "xx" case _ => "yy" } Logout 

E nel .template.scala generato, è:

""" 
<body> 
"""),_display_(Seq(/*11.4*/session/*11.11*/.get("user.id"))),format.raw/*11.26*/(""" match """),format.raw("""{"""),format.raw/*11.34*/(""" 
    case Some(_) => "xx" 
    case _ => "yy" 
"""),format.raw("""}"""),format.raw/*14.4*/(""" 
<a href="">Logout</a> 
""" 

Ma vedo nel documento, dovrebbe sostenere il match case: https://github.com/playframework/Play20/wiki/ScalaTemplates

@connected match { 

    case models.Admin(name) => { 
    <span class="admin">Connected as admin (@name)</span> 
    } 

    case models.User(name) => { 
    <span>Connected as @name</span> 
    } 

} 

Update1

Infine, ho trovato un modo di lavorare:

@defining(session.get("user.id")) { x => 
    @x match { 
     case Some(_) => { "xx" } 
     case None => {"yy"} 
    } 
} 

ma sembra così complicato.

UPDATE2

trovare un'altra soluzione semplice:

@{session.get("user.id") match { 
    case Some(_) => "xx" 
    case _ => "yy" 
}} 

Ma non funziona bene nel caso complesso:

@{session.get("user.id") match { 
    case Some(_) => {<a href="@routes.Users.logout">Logout</a>} 
    case _ => "yy" 
}} 

Il @routes.Users.logout non saranno convertiti.

Update3

questa è una soluzione getOrElse:

@session.get("user.id").map { _ => 
    <a href="@routes.Users.logout">Logout</a> 
}.getOrElse { 
    Not logged 
} 

Funziona, ma non usa match case

+0

Cosa succede se si racchiude la parte destra delle custodie tra parentesi? Per esempio.'caso Some (_) => {" xx "}' –

+0

Grazie, ma non funziona – Freewind

risposta

47

sono stato colpito lo stesso problema. Racchiudere la parte destra del caso in parentesi graffe ha risolto il problema per me.

questo funziona per me:

@user match { 
    case Some(user) => { Welcome, @user.username! } 
    case None => { <a href="@routes.Application.login">Login</a> } 
} 

Senza le parentesi graffe, ha dato un errore con lo spazio dopo il {sulla linea partita evidenziato. "'caso' atteso ma identificatore trovato".

Io mi dà anche che l'errore se provo a porre @ prima dell'apertura parentesi graffa come questo:

//This gives me the same error 
@user match { 
    case Some(user) => @{ "Welcome, " + user.username + "!" } 
    case None => { <a href="@routes.Application.login">Login</a> } 
} 
+0

Nota: usi fantasiosi degli spazi e \ n per formattare il codice possono anche far scattare lo stesso errore che ho avuto problemi con qualcosa di simile a \ @users match { case Some (users) => {\ n @for (\ n utente <- users \ n) {\ n \ @ user.name \ n} \ n} caso Nessuno => {nessun utente} } – ilmirons

0

ho trovato un modo per risolvere:

 <div class="col-md-9"> 
     @{ 
      articles collect { 
      case (title,time,shortcontent) => { 
      Html(s""" 
       <div class="blog-post"> 
        <h2 class="blog-post-title"> $title </h2> 
        <p class="blog-post-meta"> $time </p> 
        <p> $shortcontent </p> 
        <hr/> 
       </div> 
      """) 
      } 
     } 
     } 
    </div> 

l'idea è quella di restituire una stringa e quindi utilizzare un metodo Html per convertirlo.

Problemi correlati