从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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |