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

时间:2013-09-17 12:03:10

标签: scala playframework-2.0

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

system.debugMode = false

我正在尝试根据我的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>
}

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

Debug mode parameter value: false

Debug mode on

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

1 个答案:

答案 0 :(得分:6)

play.api.Configuration.getBoolean()会返回Option[Boolean]。在Play的模板引擎中,包含Option的{​​{1}}将始终在if条件中评估为true,即使该选项包含Some(...)

作为测试,我为Some(false)创建了所有可能的值,并在模板中的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))
  }
}

运行它会输出“b c”

如果您的配置参数具有默认值,请使用@(a: Option[Boolean], b: Option[Boolean], c: Option[Boolean]) @if(a) { a } @if(b) { b } @if(c) { c } 获取选项的值:

getOrElse

如果您确定config参数将始终存在(或者您对模板报告,如果未设置参数,则调试模式已关闭),您还可以Play.current.configuration.getBoolean("system.debugMode").getOrElse(defaultValue) 选项:

flatten