在Play中调用静态方法!框架控制器不起作用

时间:2011-11-07 21:25:34

标签: java playframework static-methods

我玩了!框架包含两个包含冗余代码的操作。因此,我将此代码考虑为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 个答案:

答案 0 :(得分:4)

将局部变量传递给render方法时,在传递给Groovy视图时会使用局部变量的名称。在您的示例中,您没有传递局部变量,因此Play不知道为您指定的项目指定的名称。

你有几个选择。你可以做任何一件事

  1. 将getItem的返回值设置为局部变量(item),并将项目传递给视图
  2. 将getItem的返回值设置为renderArgs映射,并指定自己的名称。
  3. 选项1可能是最明智的。