我目前在我的scala.html文件中使用PropertyDTO列表来使用Play2填充视图。 propertyDTO具有String属性“value”,其中包含JSON字符串。我想将此字符串转换为scala.html文件中的JSON对象,并遍历JSON对象集合。尝试以下操作时,
val json = Json.parse(property.value),作为scala代码中的[JsObject],它打印表达式。我想知道我的方法是否正确,如果没有,是否有合适的解决方案。
代码 - > scala.html
@(propertyList : List[PropertyDTO])
@for(property <- propertyList){
@if(property.isInputProperty){
@if(property.propertyType=="BL"){
val json = Json.parse(property.value).as[JsObject]
}
}
}
答案 0 :(得分:3)
我不建议在模板中执行此操作 - 拥有模板,而不是将HTML生成直接嵌入到Scala代码中,就是将视图逻辑与应用程序逻辑分开。如果你在模板中嵌入这样的Scala代码,那么使用模板有什么意义呢?
最佳做法是在调用模板之前准备好所有数据进行渲染,然后将其传递到模板中,并尽可能保持模板的哑,只需迭代和渲染值。
答案 1 :(得分:0)
问题是你需要通过在它前面放置一个@
来声明代码被解释为scala代码。这条线
val json = Json.parse(property.value).as[JsObject]
被解释为HTML,因为指示scala代码的行中没有@符号。您可以做的是使用@{ ... }
声明整个块以包含scala代码。
例如,您可以将您的理解结果存储在变量中,以便以后在模板中使用:
@import play.api.libs.json._
@validPropertiesAsJson = @{
for{
property <- propertyList
if property.isInputProperty
if property.propertyType == "BL"
} yield Json.parse(property.value).as[JsObject]
}
稍后在模板中使用@validPropertiesAsJson
来包含值。
更多信息可以在playframework文档中找到:http://www.playframework.com/documentation/2.2.0/ScalaTemplates
请记住尽可能少地将逻辑放入模板中。