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