我正在使用Play Framework 2.3和Hibernate,并且在用户尝试访问未定义的路由时尝试渲染我的404页面。
我的主模板调用数据库以获取填充导航栏中下拉列表的项目列表。当我尝试从我的onHanderNotFound方法中的Global类渲染我的404模板时,这会导致问题,因为我的404模板扩展了我的主模板。
是否有解决此问题的方法?简单地使用@ play.db.jpa.Transactional注释重写的onHanderNotFound方法无法解决问题,无论是哪种方式,我都会遇到以下异常:
java.lang.RuntimeException:没有绑定到此线程的EntityManager。尝试使用@ play.db.jpa.Transactional
注释您的操作方法我还试图调用具有如此注释的Controller:
public class Global extends GlobalSettings {
@Override
public F.Promise<Result> onHandlerNotFound(Http.RequestHeader request) {
return F.Promise.pure(Application.pageNotFound());
}
}
但是,没有任何改变。
答案 0 :(得分:1)
只需在JPA上下文中调用操作,就像调用带有@Transactional
的操作一样:
public class Global extends GlobalSettings {
@Override
public F.Promise<Result> onHandlerNotFound(Http.RequestHeader request) {
return JPA.withTransaction(new F.Function0<F.Promise<Result>>() {
@Override
public F.Promise<Result> apply() throws Throwable {
return F.Promise.pure(Application.pageNotFound());
}
});
}
}