Session ApacheWicket:在会话中注入依赖项(使用GUI)
我使用的是,我遇到了与的OP相同的问题 我需要访问中的DB服务层(用于用户身份验证)。我遵循并做了以下工作:Session ApacheWicket:在会话中注入依赖项(使用GUI),session,wicket,guice,Session,Wicket,Guice,我使用的是,我遇到了与的OP相同的问题 我需要访问中的DB服务层(用于用户身份验证)。我遵循并做了以下工作: @Override public Session newSession(Request request, Response response) { Session s = new MySession(request); mInjector.inject(s); return s; } 不幸的是,这导致了 java.lang.IllegalStateExcepti
@Override
public Session newSession(Request request, Response response) {
Session s = new MySession(request);
mInjector.inject(s);
return s;
}
不幸的是,这导致了
java.lang.IllegalStateException: EntityManager is closed
(可能是因为(a)我在视图中使用开放会话,以及(b)会话跨越多个请求)
我通过将注入移动到AuthenticatedWebSession.authenticate
方法解决了这个问题
@Override
public boolean authenticate(String username, String pass) {
Injector.get().inject(this);
...
}
我怀疑这不是最佳实践,因为现在我也需要在其他方法中访问服务层,在每个这样的方法中添加Injector.get().Injector(this)
,似乎不是一个好主意
我的问题:
如何在每次请求时向会话对象执行注入?(或者,如果这是一种糟糕的方法,我如何访问中的服务层?您可以实现
IRequestCycleListener
(扩展AbstractRequestCycleListener
)并实现:
@Override
public void onBeginRequest(RequestCycle cycle)
{
if (Session.exists()) {
Injector.get().inject(Session.get());
}
}
在
应用程序#init()
中使用getRequestCycleListener()注册你的IRequestCycleListener
。添加(新的YourRequestCycleListener())
你使用了无状态的
bean吗?这不是Spring吗?(我在用guice)啊,谢谢你。这正是我想要的。关于最后一部分。我阅读了下面的“wicket guice项目将负责代理注入的bean,以便可以安全地序列化页面。”()。这是否意味着我不需要担心分离服务?你是对的,你得到的只是一些可序列化的代理。我将从我的答案中删除这一部分。再次感谢你的回答。我发布了一个后续问题。