Как сделать запрос JPA из шаблона представления в игре - PullRequest
1 голос
/ 05 ноября 2010

Я пытаюсь выполнить запрос JPA из шаблона представления, но он не работает (я проверил, что есть записи, использующие phpMyAdmin). Я знаю, что обычно это следует делать через контроллер и передавать через render, но это является частью построения меню, которое будет появляться на каждой странице, и я не хочу изменять каждый контроллер для достижения этой цели.

То, что я сейчас пытаюсь это

<ul>
%{
    import models.Building;
    List<Building> buildings = Building.findAll();
}%
#{list items: buildings, as: 'building'}
    <li><a href="">${building}</a></li>
#{/list}
</ul>

но я получаю ошибку The template /app/views/Networks/grid.html does not compile : unexpected token: ( со ссылкой на строку, которая вызывает findAll(). Какой правильный способ сделать это?

Ответы [ 2 ]

4 голосов
/ 08 ноября 2010

Вместо того, чтобы пытаться сделать это на странице (плохая практика) или добавить его к каждому контроллеру, вы должны добавить его к одному родительскому контроллеру с помощью метода, помеченного @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?

1 голос
/ 05 ноября 2010

Обнаружил, как обойти это, но мне все равно было бы интересно узнать, что не так с оригинальным кодом. Я получил это, просто делая

<ul>
    #{list items: models.Building.findAll(), as: 'building'}
    <li>#{a @Buildings.edit(building.code)}${building}#{/a}</li>
    #{/list}
</ul>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...