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
を使用しません
私は同じ問題にぶつかっていました。ケースの右側を中括弧で囲むと、問題が解決しました。
これは私のために働きます:
@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> }
}
私は解決する方法を見つけました:
<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メソッドを使用して変換するという考え方です。