【发布时间】:2011-07-07 04:15:20
【问题描述】:
我的模板中出现 NullPointerException 已经有一段时间了,并且无法在网上找到任何帮助,所以我希望这里的人可以对我的问题有所了解。
我创建了自己的“基本控制器”,所有其他控制器都对其进行了扩展。 基本控制器包含一个静态成员,它持有用户会话(不是播放会话,而是一个数据库模型):
public class Home extends SessionController {
...
}
public class SessionController extends Controller {
protected static SessionDao siteSession;
}
我的问题... 我需要将此静态会话成员传递给我的模板。 在 Home 中,我执行以下操作:
public class Home extends SessionController {
public static void index() {
render(siteSession);
}
}
然后在我的模板中执行:
${siteSession.search.query}
这会在 siteSession 上导致 NullPointerException(我确信在将它传递给 render() 之前它已在 Controller 中正确设置)。
我已经搞砸了很多,并设法让以下工作:
public class Home extends SessionController {
public static void index() {
// Just setting mySession to siteSession
SessionDao mySession = siteSession;
render(siteSession);
}
}
然后在我的模板中执行:
${mySession.search.query}
请注意,我在模板中使用了 mySession,并且在我的操作中仍然将 siteSession 传递给 render()。出于某种原因,这行得通,我得到了我的会话对象,一切都很好,但这并不是真正的方法。我什至无法访问模板中的 mySession,因为它从未传递给 render()。
如果有人能对此有所了解,我将不胜感激。
我的首选方案是让 SessionController 覆盖渲染并将 siteSession 对象“自动”传递给模板引擎。如果有人对我如何做这件事有任何建议,我将不胜感激,因为我已经尝试过并且无法访问模板中的任何和所有对象(此 sn-p 不起作用):
public class Home extends SessionController {
public static void render(Object ... args) {
if (args == null) {
args = new Object[1];
}
args[args.length] = siteSession;
Controller.render(args);
}
}
【问题讨论】:
标签: playframework