Вызов статических методов в Play!каркасный контроллер не работает - PullRequest
0 голосов
/ 08 ноября 2011

У меня есть игра! фреймворк с двумя действиями, которые содержат избыточный код. Поэтому я включил этот код в метод private static, но тогда он больше не работает.

  public static void show(long itemId, String listId) {
    render(getItem(itemId, listId));
  }

  private static Item getItem(long itemId, String listId) {
    // otherwise duplicate code ...
    return item;
  }

Если я добавлю код, содержащийся в getItem, в действие show, то все в порядке:

  // this works
  public static void show(long itemId, String listId) {
    Item item = // duplicate code ...
    render(item);
  }

Почему я не могу вызывать другие статические методы в Play! контроллер?

Решение

Благодаря «Codemwnci» я реализовал следующее решение:

  public static void show(long itemId, String listId) {
    renderArgs.put("item", getItem(itemId, listId));
    render();
  }

Я предпочитаю renderArgs, потому что это делает намерение более ясным, чем локальная переменная.

1 Ответ

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

Когда вы передаете локальную переменную в метод рендеринга, имя локальной переменной используется при передаче в представление Groovy. В вашем примере вы не передаете локальную переменную, поэтому Play не знает, какое имя дать указанному вами элементу.

У вас есть несколько вариантов. Вы можете сделать либо

  1. Установить возврат из getItem в локальную переменную (элемент) и передать элемент в представление
  2. Установите возврат из getItem на карту renderArgs и укажите свое имя.

Вариант 1, вероятно, самый разумный.

...