Html 在播放2.3.2的视图中使用Future
我正在写剧本2.3.2的申请。 在我的控制器中,我有一个异步方法来计算Html 在播放2.3.2的视图中使用Future,html,scala,asynchronous,playframework,Html,Scala,Asynchronous,Playframework,我正在写剧本2.3.2的申请。 在我的控制器中,我有一个异步方法来计算未来[选项[(字符串,Int)]] 由于计算速度较慢,我希望开始创建视图,并在计算完成后完成构建视图 在同一个控制器中,我有一个操作调用此方法并加载一个传递结果的视图,如下所示: def max = Action.async { calculateMax.flatMap(result => Future{Ok(recommendationsystem.views.html.ma
未来[选项[(字符串,Int)]]
由于计算速度较慢,我希望开始创建视图,并在计算完成后完成构建视图
在同一个控制器中,我有一个操作调用此方法并加载一个传递结果的视图,如下所示:
def max = Action.async {
calculateMax.flatMap(result =>
Future{Ok(recommendationsystem.views.html.manager.statistics.max(result))
)
}
@(max: scala.concurrent.Future[Option[(String, Int)]])
@import util._
@recommendationsystem.views.html.main("Max tag")(recommendationsystem.views.html.nav.navbar("statistics")) {
<h1>Most used tag</h1>
@max flatMap {result => result match {
case Some(x) => {
<p>
<ul>
<li>Tag: @x._1</li>
<li>Occurrencies: @x._2</li>
</ul>
</p>
}
case None => {
<p>No one tag present in the db</p>
}
}
}
<p><a href="@recommendationsystem.controllers.manager.routes.StatisticsController.index()"></a> </p>
}
def max = Action.async {
calculateMax.map(result =>
Ok(recommendationsystem.views.html.manager.statistics.max(result))
)
}
@(max: Option[(String, Int)])
@max match {
case Some(x) => {
...
}
case None => {
<p>No one tag present in the db</p>
}
}
My max view的实现方式如下:
def max = Action.async {
calculateMax.flatMap(result =>
Future{Ok(recommendationsystem.views.html.manager.statistics.max(result))
)
}
@(max: scala.concurrent.Future[Option[(String, Int)]])
@import util._
@recommendationsystem.views.html.main("Max tag")(recommendationsystem.views.html.nav.navbar("statistics")) {
<h1>Most used tag</h1>
@max flatMap {result => result match {
case Some(x) => {
<p>
<ul>
<li>Tag: @x._1</li>
<li>Occurrencies: @x._2</li>
</ul>
</p>
}
case None => {
<p>No one tag present in the db</p>
}
}
}
<p><a href="@recommendationsystem.controllers.manager.routes.StatisticsController.index()"></a> </p>
}
def max = Action.async {
calculateMax.map(result =>
Ok(recommendationsystem.views.html.manager.statistics.max(result))
)
}
@(max: Option[(String, Int)])
@max match {
case Some(x) => {
...
}
case None => {
<p>No one tag present in the db</p>
}
}
@(最大值:scala.concurrent.Future[选项[(字符串,Int)])
@导入util_
@recommendationsystem.views.html.main(“最大标记”)(recommendationsystem.views.html.nav.navbar(“统计”)){
常用标签
@最大平面图{result=>结果匹配{
案例部分(x)=>{
- 标签:@x.\u 1
- 发生率:@x.\U 2
}
案例无=>{
数据库中不存在任何标签
}
}
}
}
但是这段代码没有编译,编译器给了我以下编译错误:
[error] /Users/alberto/git/bdrim/modules/recommendation-system/app/recommendationsystem/views/manager/statistics/max.scala.html:8: ')' expected but 'case' found.
[error] case Some(x) => {
[error] ^
[error] /Users/alberto/git/bdrim/modules/recommendation-system/app/recommendationsystem/views/manager/statistics/max.scala.html:18: ')' expected but 'case' found.
[error] case None => {
[error] ^
[error] /Users/alberto/git/bdrim/modules/recommendation-system/app/recommendationsystem/views/manager/statistics/max.scala.html:26: ';' expected but ',' found.
[error] <p><a href="@recommendationsystem.controllers.manager.routes.StatisticsController.index()"></a> </p>
[error] ^
[error] three errors found
[error] /Users/alberto/git/bdrim/modules/recommendation-system/target/scala-2.11/twirl/main/recommendationsystem/views/html/manager/statistics/max.template.scala:27: ')' expected but 'case' found.
[error] """),_display_(/*7.6*/max),format.raw/*7.9*/(""" """),format.raw/*7.10*/("""flatMap """),format.raw/*7.18*/("""{"""),format.raw/*7.19*/("""result => result match """),format.raw/*7.42*/("""{""")/*8.5*/case Some(x) =>/*8.20*/ {_display_(Seq[Any](format.raw/*8.22*/("""
[error] ^
[error] /Users/alberto/git/bdrim/modules/recommendation-system/target/scala-2.11/twirl/main/recommendationsystem/views/html/manager/statistics/max.template.scala:36: ')' expected but 'case' found.
[error] """)))}/*18.5*/case None =>/*18.17*/ {_display_(Seq[Any](format.raw/*18.19*/("""
[error] ^
[error] /Users/alberto/git/bdrim/modules/recommendation-system/target/scala-2.11/twirl/main/recommendationsystem/views/html/manager/statistics/max.template.scala:40: ';' expected but ',' found.
[error] """)))},format.raw/*23.5*/("""}"""),format.raw/*23.6*/("""
[error]
[error]/Users/alberto/git/bdrim/modules/recommendationsystem/app/recommendationsystem/views/manager/statistics/max.scala.html:8:“)”应为“预期”,但找到了“案例”。
[错误]案例部分(x)=>{
[错误]^
[错误]/Users/alberto/git/bdrim/modules/recommendationsystem/app/recommendationsystem/views/manager/statistics/max.scala.html:18:“)”应为“”,但找到“case”。
[错误]案例无=>{
[错误]^
[错误]/Users/alberto/git/bdrim/modules/recommendationsystem/app/recommendationsystem/views/manager/statistics/max.scala.html:26:';“预期”,但“发现”。
[错误]
[错误]^
[错误]发现三个错误
[错误]/Users/alberto/git/bdrim/modules/recommendation system/target/scala-2.11/twirl/main/recommendationsystem/views/html/manager/statistics/max.template.scala:27:')应为“”,但找到了“case”。
[错误]“”“,”format.raw/*7.9*/(“”“),format.raw/*7.10*/(”flatMap“),format.raw/*7.18*/(“”“,”format.raw/*7.19*/(”result=>result match”“),format.raw/*7.42*/(“{”“”)/*8.5*/案例部分(x)=>/*8.20*/(Seq[Any format.raw/*8.22*/”)
[错误]^
[错误]/Users/alberto/git/bdrim/modules/recommendation system/target/scala-2.11/twirl/main/recommendationsystem/views/html/manager/statistics/max.template.scala:36:“)”应为“”,但找到了“case”。
[错误]“”“))}/*18.5*/case None=>/*18.17*/{{Seq[Any](format.raw/*18.19*/(“”)
[错误]^
[错误]/Users/alberto/git/bdrim/modules/recommendation system/target/scala-2.11/twirl/main/recommendationsystem/views/html/manager/statistics/max.template.scala:40:';“预期但”“发现”。
[错误]“”“)))},format.raw/*23.5*/(“”“}”)格式,format.raw/*23.6*/(“”)
[错误]
视图似乎看不到未来类型。
有什么问题吗?这里的编译错误来自于你的twirl语法,而不是未来的twirl。twirl模板对间距和新行非常挑剔。带有空格的
@max flatMap
肯定会破坏一些东西,因为twirl不知道是否应该打印出max
,或者寻找更多的代码。它最好用@{…}
包围整个块
但是,其中一些是不相关的,因为您不应该首先将未来
传递给视图。模板不会部分呈现,然后稍后填充未来
值。在未来中包装推荐系统.views.html.manager.statistics.max
。应用
基本上不起作用这里需要注意的关键是,result
甚至不是Future
。假设calculateMax
返回Future[Option[(String,Int)]
,当您调用map
时,您正在异步操作选项[(String,Int)]
该Future
的结果
因此,控制器功能应如下所示:
def max = Action.async {
calculateMax.flatMap(result =>
Future{Ok(recommendationsystem.views.html.manager.statistics.max(result))
)
}
@(max: scala.concurrent.Future[Option[(String, Int)]])
@import util._
@recommendationsystem.views.html.main("Max tag")(recommendationsystem.views.html.nav.navbar("statistics")) {
<h1>Most used tag</h1>
@max flatMap {result => result match {
case Some(x) => {
<p>
<ul>
<li>Tag: @x._1</li>
<li>Occurrencies: @x._2</li>
</ul>
</p>
}
case None => {
<p>No one tag present in the db</p>
}
}
}
<p><a href="@recommendationsystem.controllers.manager.routes.StatisticsController.index()"></a> </p>
}
def max = Action.async {
calculateMax.map(result =>
Ok(recommendationsystem.views.html.manager.statistics.max(result))
)
}
@(max: Option[(String, Int)])
@max match {
case Some(x) => {
...
}
case None => {
<p>No one tag present in the db</p>
}
}
你的观点是这样的:
def max = Action.async {
calculateMax.flatMap(result =>
Future{Ok(recommendationsystem.views.html.manager.statistics.max(result))
)
}
@(max: scala.concurrent.Future[Option[(String, Int)]])
@import util._
@recommendationsystem.views.html.main("Max tag")(recommendationsystem.views.html.nav.navbar("statistics")) {
<h1>Most used tag</h1>
@max flatMap {result => result match {
case Some(x) => {
<p>
<ul>
<li>Tag: @x._1</li>
<li>Occurrencies: @x._2</li>
</ul>
</p>
}
case None => {
<p>No one tag present in the db</p>
}
}
}
<p><a href="@recommendationsystem.controllers.manager.routes.StatisticsController.index()"></a> </p>
}
def max = Action.async {
calculateMax.map(result =>
Ok(recommendationsystem.views.html.manager.statistics.max(result))
)
}
@(max: Option[(String, Int)])
@max match {
case Some(x) => {
...
}
case None => {
<p>No one tag present in the db</p>
}
}
@(最大值:选项[(字符串,Int)])
@最大匹配{
案例部分(x)=>{
...
}
案例无=>{
数据库中不存在任何标签
}
}