макет scalate / scaml не применен

#scalate

#масштабировать

Вопрос:

Я следовал руководству пользователя, чтобы применить шаблон по умолчанию, например, в проектах src / main / webapp / WEB-INF / scalate / layouts /default.scaml У меня есть шаблон, который должен применяться ко всем файлам scaml, но когда я захожу на свою тестовую страницу (в src / main / webapp / WEB-INF / views / x / view.scaml), он отображает содержимое только на этой одной странице. Даже если я помещу явный атрибут layout вверху, он все равно не отобразится, т.Е.

 - attributes ("layout") = "/WEB-INF/scalate/layouts/default.scaml"
  

Есть идеи о том, что я мог делать неправильно?

Комментарии:

1. Похоже, это подразумевает, что стратегия компоновки по умолчанию была изменена на нулевую стратегию: fusesource.com/issues/browse/SCALATE-34 . Есть идеи о том, как задать стратегию компоновки? Я не думаю, что это есть в документах, или я этого не видел…

2. Я использую преобразователь spring View от scalate, ScalateViewResolver. Похоже, что стратегия компоновки должна быть настроена на этот класс, но я не вижу никакого способа сделать это.

Ответ №1:

Копаясь в исходном коде scalate (1.4.1), выясняется, что ожидается, что viewName будет иметь префикс «layout:» если макеты должны быть применены, см. https://github.com/scalate/scalate/blob/master/scalate-spring-mvc/src/main/scala/org/fusesource/scalate/spring/view/ScalateViewResolver.scala .

Это кажется очень странным решением, поскольку в документах указано, что макеты могут быть отключены для каждого просмотра, выполнив:

 - attributes("layout") = ""
  

Учитывая это, я не уверен, почему макеты по умолчанию отключены, и каждое представление должно явно запрашивать включение функции макета.

Комментарии:

1. Похоже, это особенность плагина spring-mvc для scalate, а не самого scalate. Что касается остальных шаблонов scalate, то они применяются к макету с использованием упомянутого вами механизма. К сожалению, я недостаточно знаю о spring-mvc, чтобы понять, хороша ли эта идея layout: prefix или нет