Доступ к логическим значениям из приложения.conf в шаблоне scala
у меня есть логический параметр в приложение.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 ответов
play.api.Configuration.getBoolean()
возвращает Option[Boolean]
. В движке шаблонов Play, an Option
содержащих Some(...)
всегда будет оценивать значение 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
:
Play.current.configuration.getBoolean("system.debugMode").getOrElse(defaultValue)
если вы уверены, что параметр config всегда будет там (или вы довольны своим шаблоном, сообщающим, что режим отладки выключен, если параметр не установлен), вы также можете flatten
опции:
Play.current.configuration.getBoolean("system.debugMode").flatten