加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 18:55:44 所属栏目:安全 来源:网络整理
导读:我在application.conf中有一个布尔参数: system.debugMode = false 我正在尝试根据我的scala模板中的值进行分支: pDebug mode parameter value: @Play.current.configuration.getBoolean("system.debugMode")/p@if(Play.current.configuration.getBoolean(
我在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评估中?

解决方法

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”.

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

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读