Пример соответствия в шаблоне scala не работает, в play2
Мой код в шаблоне scala:
@session.get("user.id") match {
case Some(_) => "xx"
case _ => "yy"
}
<a href="">Logout</a>
Но case ...
отображается непосредственно на сгенерированной странице html:
match { case Some(_) => "xx" case _ => "yy" } Logout
И в сгенерированном .template.scala это:
"""
<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>
"""
Но я вижу в документе, что он должен поддерживать 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
Наконец, я нашел способ работы:
@defining(session.get("user.id")) { x =>
@x match {
case Some(_) => { "xx" }
case None => {"yy"}
}
}
Но это выглядит так сложно.
UPDATE2
Найдите другое простое решение:
@{session.get("user.id") match {
case Some(_) => "xx"
case _ => "yy"
}}
Но в сложном случае это не работает:
@{session.get("user.id") match {
case Some(_) => {<a href="@routes.Users.logout">Logout</a>}
case _ => "yy"
}}
@routes.Users.logout
не будет преобразован.
Update3
Это решение getOrElse
:
@session.get("user.id").map { _ =>
<a href="@routes.Users.logout">Logout</a>
}.getOrElse {
Not logged
}
Он работает, но не использует match case
Ответы
Ответ 1
Я столкнулся с той же проблемой. Закрытие правой части корпуса в фигурных скобках устранило проблему для меня.
Это работает для меня:
@user match {
case Some(user) => { Welcome, @user.username! }
case None => { <a href="@routes.Application.login">Login</a> }
}
Без брекетов он дал ошибку с пробелом после того, как {в строке соответствия выделена. "ожидаемый" случай, но идентификатор найден. "
Я также даю мне эту ошибку, если я попытаюсь поставить @перед открытием фигурной скобки следующим образом:
//This gives me the same error
@user match {
case Some(user) => @{ "Welcome, " + user.username + "!" }
case None => { <a href="@routes.Application.login">Login</a> }
}
Ответ 2
Я нашел способ решить:
<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>
идея состоит в том, чтобы вернуть строку, а затем использовать метод Html для ее преобразования.