【问题标题】:Accessing boolean values from application.conf in a scala template在 scala 模板中从 application.conf 访问布尔值
【发布时间】:2013-09-17 20:40:46
【问题描述】:

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

system.debugMode = false

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

<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

我这里有选角问题吗?似乎我的值从配置文件返回为“假”,但@if 语句将其评估为真。我注意到 API 声明 getBoolean 方法返回一个包含布尔值的选项,所以也许这不能放入 if 评估中?

【问题讨论】:

  • 选项不是布尔值。要获得您想要的结果,您需要确定选项是否包含布尔值,并决定如果包含,则如何操作,如果不包含。例如:@if(Play.current.configuration.getBoolean("system.debugMode").getOrElse(true)) { - 此示例假定值为 true,除非特别设置。如果您想假设 false 除非设置,请更改为 getOrElse(false)

标签: scala playframework-2.0


【解决方案1】:

play.api.Configuration.getBoolean() 返回一个Option[Boolean]。在 Play 的模板引擎中,包含 Some(...)Option 将始终在 if 条件下计算为 true,即使选项包含 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))
  }
}

模板:

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

@if(a) { a }
@if(b) { b }
@if(c) { c }

运行它会给出输出 "b c"

如果您的配置参数有默认值,请使用getOrElse 获取选项的值:

Play.current.configuration.getBoolean("system.debugMode").getOrElse(defaultValue)

如果您确定 config 参数将始终存在(或者您对模板报告调试模式已关闭(如果未设置该参数)感到满意),您也可以flatten 选项:

Play.current.configuration.getBoolean("system.debugMode").flatten

【讨论】:

  • 谢谢,这正是我需要的语法。
猜你喜欢
  • 2020-09-11
  • 1970-01-01
  • 1970-01-01
  • 2018-01-02
  • 1970-01-01
  • 2016-01-18
  • 1970-01-01
  • 1970-01-01
  • 2014-03-23
相关资源
最近更新 更多