Вместо того, чтобы пытаться сделать это на странице (плохая практика) или добавить его к каждому контроллеру, вы должны добавить его к одному родительскому контроллеру с помощью метода, помеченного @Before
.Это будет вызываться на каждой странице, поэтому вам нужно всего лишь один раз ввести код.
Например.Родительский контроллер (он же перехватчик) будет выглядеть так:
public class ControllerInterceptor extends Controller {
@Before
public static void intercept() {
RenderArgs.current().put("buildings", Building.findAll());
}
}
Тогда каждый контроллер добавит следующую аннотацию:
@With(ControllerInterceptor.class)
public class MyController extends Controller {
...
}
И код вашей страницы будет ссылаться на него так же, как вывы уже делаете:
<ul>
#{list buildings, as: 'building'}
<li>#{a @Buildings.edit(building.code)}${building}#{/a}</li>
#{/list}
</ul>
Что касается того, почему ваш оригинальный код не работал, я не уверен.Возможно, это связано с улучшением класса Model в Play?