如何使用正确语法的语句设置for循环播放框架Scala模板

时间:2015-02-24 18:56:33

标签: scala playframework playframework-2.3

我正在尝试在scala模板中设置变量。循环访问用户拥有的角色,如果发现用户是客户,则使用输入执行某些操作。如果没有,那就做点别的事。

但是scala不是那么简单,它不会在下面的代码上编译。

@var = @{ if(user != null){
    @for(role <- user.roles.filter(_.getName()=="customer")) {
        var=@customer(input)
    }
}
}

@if( var == null){
   var=@others(input)
}

它给了我两个错误

t.scala.html:275:: identifier expected but 'for' found.
[error]         @for(role <- user.roles.filter(_.getName()=="customer")) 

t.scala.html:278: expected start of definition

另外,有没有更好的方法在scala中执行此操作?感谢

我的参考:Scala template set variable

更新: 我的目标是尝试执行类似下面的操作,但是在scala模板中:

result=null
for role in User.roles:
    if(role == "customer"):
        result=customer(xyz)
        break
if(result==null):
    result = others(xyz)

2 个答案:

答案 0 :(得分:1)

要在Scala模板中的if语句中设置for循环,您不需要分配变量。您只需在模板中使用if块来显示内容即可。例如

@if(user != null) {
    @for(role <- user.roles.filter(_.getName()=="customer")) {
        @customer(input)
        @* Do other stuff related to 'role' and 'input' here *@
    }
} else {
    @* Do something else *@
}

如需进一步参考,我建议您查看documentation for Play templates。如果你真的想定义一个变量,你可以使用defining帮助器来完成:

@defining(user.getFirstName() + " " + user.getLastName()) { fullName =>
    <div>Hello @fullName</div>
}

您可以定义一个可重复使用的块,而不是定义变量,这在您的情况下可能很有用。例如,

@customer_loop(input: String) = {
    @if(user != null) {
        @for(role <- user.roles.filter(_.getName()=="customer")) {
            @customer(input)
            @* Do other stuff related to 'role' and 'input' here *@
        }
    } else {
        @* Do something else *@
    }
}

答案 1 :(得分:1)

声明变量do

@import scala.Any; var result:Any=null //where Any is the datatype accoding to your requirement

重新分配其值

@{result = "somevalue"}

因此解决方案符合您提供的伪

@import java.lang.String; var result:String=null
@import scala.util.control._;val loop = new Breaks;

 @loop.breakable {
     @for(role <- roleList) {

         @if(role.equals("customer")) {
             @{
                 result = "somevalue"
             }

             @{loop.break};

         }
     }
 }

  @if(result==null){
      @{result="notfound"}
  }

同时检查Similar1Similar2