Доступ к логическим значениям из приложения.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