从scala模板中的application.conf访问布尔值

Mat*_*att 6 scala playframework-2.0

我在application.conf中有一个布尔参数:

system.debugMode = false
Run Code Online (Sandbox Code Playgroud)

我正在尝试根据我的scala模板中的值进行分支:

<p>Debug mode parameter value: @Play.current.configuration.getBoolean("system.debugMode")</p>

@if(Play.current.configuration.getBoolean("system.debugMode")) {
    <p>Debug mode on</p>
} else {
    <p>Debug mode off</p>
}
Run Code Online (Sandbox Code Playgroud)

我希望看到输出"调试模式关闭",但我实际看到的是:

Debug mode parameter value: false

Debug mode on
Run Code Online (Sandbox Code Playgroud)

我这里有铸造问题吗?看来我的值从配置文件返回为'false',但@if语句将其评估为true.我注意到API声明getBoolean方法返回一个包含布尔值的选项,所以也许这不能放入if评估中?

Car*_*ten 6

play.api.Configuration.getBoolean()返回一个Option[Boolean].在Play的模板引擎,一个Option包含Some(...)将始终为true,在如果有条件,即使选项包含Some(false).

作为测试,我已经为a创建了所有可能的值,Option[Boolean]@if(...)在模板中测试了它们发生的事情.

控制器:

object Application extends Controller {
  def index = Action {
    val a: Option[Boolean] = None
    val b: Option[Boolean] = Some(true)
    val c: Option[Boolean] = Some(false)
    Ok(views.html.index(a, b, c))
  }
}
Run Code Online (Sandbox Code Playgroud)

模板:

@(a: Option[Boolean], b: Option[Boolean], c: Option[Boolean])

@if(a) { a }
@if(b) { b }
@if(c) { c }
Run Code Online (Sandbox Code Playgroud)

运行它会输出"b c".

如果您的config参数具有默认值,请使用以下内容获取Option的值getOrElse:

Play.current.configuration.getBoolean("system.debugMode").getOrElse(defaultValue)
Run Code Online (Sandbox Code Playgroud)

如果你确定的配置参数将永远存在(或者你认为自己的模板报告说,调试模式是关闭的,如果参数没有设置),也可以flatten选择:

Play.current.configuration.getBoolean("system.debugMode").flatten
Run Code Online (Sandbox Code Playgroud)