Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Templates 如何使用视图模板进行JPA查询_Templates_Jpa_Playframework - Fatal编程技术网

Templates 如何使用视图模板进行JPA查询

Templates 如何使用视图模板进行JPA查询,templates,jpa,playframework,Templates,Jpa,Playframework,我正在尝试从视图模板执行JPA查询,但它不起作用。我已使用phpMyAdmin验证了是否存在记录。我知道这通常应该通过控制器完成,并通过render传入,但这是构建菜单的一部分,它将出现在每个页面上,我不想为了完成这一点而修改每个控制器 我现在正在尝试的是 <ul> %{ import models.Building; List<Building> buildings = Building.findAll(); }% #{list items: build

我正在尝试从视图模板执行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>

但是我得到了模板/app/views/Networks/grid.html未编译的错误:意外标记:引用调用findAll的行。做这件事的正确方法是什么?

发现了如何解决这个问题,但我仍然有兴趣知道原始代码的错误。我就是这样做的

<ul>
    #{list items: models.Building.findAll(), as: 'building'}
    <li>#{a @Buildings.edit(building.code)}${building}#{/a}</li>
    #{/list}
</ul>

发现了如何解决这个问题,但我仍然有兴趣知道原始代码的错误。我就是这样做的

<ul>
    #{list items: models.Building.findAll(), as: 'building'}
    <li>#{a @Buildings.edit(building.code)}${building}#{/a}</li>
    #{/list}
</ul>

与其在页面中尝试这样做,不如将其添加到每个控制器中,而应将其添加到带有@Before注释的方法中的一个父控制器中。这将在每个页面上被调用,因此您只需要执行一次代码

例如,父控制器aka拦截器看起来像:

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>

至于你的原始代码为什么不起作用,我不确定。可能与Play如何增强模型类有关?

与其在页面中尝试这样做,不如将其添加到每个控制器中。您应该将其添加到带有@Before注释的方法中的一个父控制器中。这将在每个页面上被调用,因此您只需要执行一次代码

例如,父控制器aka拦截器看起来像:

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>

至于你的原始代码为什么不起作用,我不确定。可能与Play如何增强模型类有关?

这让我想到了一个问题。创建访问模型并独立于控制器呈现数据的FastTag会是一种不好的做法吗?这就产生了一个问题。创建访问模型并独立于控制器渲染数据的FastTag是一种不好的做法吗?