人
我在基于Wicket的应用程序的http会话中有以下代码:
public static HttpServletRequest getHttpServletRequest() {
Request request = RequestCycle.get().getRequest();
if (request != null && request instanceof WebRequest) return
HttpServletRequest) request.getContainerRequest();
return null;
}
public static SessionObject getSessionObject() {
HttpServletRequest request = getHttpServletRequest();
HttpSession session = request == null ? null : request.getSession();
SessionObject so = session == null ? null : (SessionObject) session.getAttribute("so");
if (so == null) {
logger.warn("SessionObject is not found in HttpSession!");
}
return so;
}
会话对象在jsp中初始化,如下所示:
jsp:useBean id="so" class="package.SessionObject" scope="session"
我想把这个属性所以模仿到Wicket测试中 试图做以下事情:
bind(SessionObject.class).toInstance(EasyMock.createMock(SessionObject.class));
也
tester = new WicketTester(new MockApplication() {
@Override
public Session newSession(Request request, Response response) {
final Session session = super.newSession(request, response);
session.setAttribute("so", EasyMock.createMock(SessionObject.class));
return session;
}
});
但是当我尝试将方法称为:
init(){
a = getSessionObject().getA();
}
getSessionObject()返回null,因为没有名为“so”的属性。
你可以帮助我把这个属性模拟到会话中吗?
答案 0 :(得分:0)
您可以将辅助方法简化为:Session.get().getAttribute("so")
。
您编写值的代码已使用Session#setAttribute()
。
尝试绑定会话:Session#bind()
。除非绑定Wicket将为每个请求创建一个新的Session实例。一旦绑定,Wicket将获得HttpSession并将Wicket的Session存入其中(作为属性)。
如果这没有帮助,那么在Session set / getAttribute()方法中放置一个断点,看看会发生什么。