Scala 播放框架模板无法转义URL
我有一个播放模板dynamicLink.scala.htmlScala 播放框架模板无法转义URL,scala,templates,playframework,playframework-2.0,template-engine,Scala,Templates,Playframework,Playframework 2.0,Template Engine,我有一个播放模板dynamicLink.scala.html @( urlWithQuotes: Html, id: Html, toClick: Html ) @uniqueId_With_Quotes() = { Html("\"" + (@id) + "_" + scala.util.Random.nextInt.toString + "\"") } @defining(uniqueId_With_Quotes()) { uniqueID => <a id=
@( urlWithQuotes: Html, id: Html, toClick: Html )
@uniqueId_With_Quotes() = {
Html("\"" + (@id) + "_" + scala.util.Random.nextInt.toString + "\"")
}
@defining(uniqueId_With_Quotes()) { uniqueID =>
<a id=@uniqueID class="dynamicLink" href=@urlWithQuotes> @toClick </a>
<script><!--Do stuff with dynamic link using jQuery--></script>
}
当我渲染它时,我得到
<a id=
Html("\"" + (MyID) + "_" + scala.util.Random.nextInt.toString + "\"")
class="dynamicLink" href=@{routes.Controler.action()}> Click Me </a>
呈现
<a id=
Html("\"" + (MyID) + "_" + scala.util.Random.nextInt.toString + "\"")
class="dynamicLink" href=@{routes.Controller.action()}> Click Me </a>
<script>
...
</script>
...
*将Html更改为字符串无效*
@(urlWithQuotes: String, id: String, toClickOn: String)
@uniqueId_With_Quotes() = {
Html("\"" + (@id) + "_" + scala.util.Random.nextInt.toString + "\"")
}
@defining(uniqueId_With_Quotes) { uniqueID =>
<a id=@uniqueID class="dynamicLink" href=@urlWithQuotes> @toClickOn </a>
...
}
*请注意,“@uniqueId\u带引号()”扩展为“Html”(\”+(MyID)+“\”+scala.util.Random.nextInt.toString+“\”)”。我希望它实际执行字符串连接*强>
@(urlWithQuotes: String, id: String, toClickOn: String)
@uniqueId_With_Quotes() = {
Html("\"" + (@id) + "_" + scala.util.Random.nextInt.toString + "\"")
}
@defining(uniqueId_With_Quotes) { uniqueID =>
<a id=@uniqueID class="dynamicLink" href=@urlWithQuotes> @toClickOn </a>
...
}
此外,这应该是显而易见的,但我希望每个链接和附带的jquery都使用该链接唯一的ID呈现,并且我不希望控制器需要担心分配这些唯一ID。我这样做的方法是在每个id后面附加一个随机数(尽管视图最好有一个计数)。我需要在视图中具有这种有状态行为,因为我需要“dynamicLink”对控制器完全透明。您是否尝试将变量用作字符串类型
@( urlWithQuotes: String, id: String, toClick: String )
我找到了解决办法。您必须传递一个调用对象
@dynamicLink(
({routes.Controller.action()}),
"MyID",
"Click Me"
)
将这些参数传递到
@(urlNoQuotes: Call, id: String = "", toClickOn: String = "")
@uniqueId_With_Quotes() = @{
Html("\"" + (id) + "_" + scala.util.Random.nextInt.toString + "\"")
}
@url() = @{
Html("\"" + urlNoQuotes + "\"")
}
@defining( url() ) { processedURL =>
@defining(uniqueId_With_Quotes()) { uniqueID =>
...
}
}
^现在它工作了。将Html更改为字符串不起作用。另外,我不知道什么时候应该使用Html,什么时候应该使用字符串(在用户表单之外,总是使用字符串只是为了保护注入)
@dynamicLink(
({routes.Controller.action()}),
"MyID",
"Click Me"
)
@(urlNoQuotes: Call, id: String = "", toClickOn: String = "")
@uniqueId_With_Quotes() = @{
Html("\"" + (id) + "_" + scala.util.Random.nextInt.toString + "\"")
}
@url() = @{
Html("\"" + urlNoQuotes + "\"")
}
@defining( url() ) { processedURL =>
@defining(uniqueId_With_Quotes()) { uniqueID =>
...
}
}