现在已分叉到wicket-rest的github项目与wicket-1.5不兼容。
wicket mailing list中提出了这个问题,但仍未得到解决。我尝试了邮件列表中给出的建议,但问题仍然存在。不会调用“onBeforeRender”方法,因此有效地绕过了wicket-rest预处理。
当无状态提示设置为true时,可能不会调用“onBeforeRender”吗?
答案 0 :(得分:1)
经过一番研究,我设法解决了这个问题,并考虑与社区分享这个问题。
由于wicket-1.5中的api更改,wicket-rest-api类需要进行以下更改:
AbstractWebServicePage(或者它是等效的,如果你已经分叉了它)现在应该实现IMarkupResourceStreamProvider。实现可以是这样的:(取自邮件列表)
@Override
public IResourceStream getMarkupResourceStream(MarkupContainer container, Class<?> containerClass)
{
return new StringResourceStream("");
}
“hasAssociatedMarkup”现已弃用,可以从AbstractWebServicePage中删除。
将AbstractWebServicePage中重写的“onBeforeRender”内定义的代码移动到名为“onBeforeRenderPage”的方法。请注意,此方法不是wicket api的一部分,而是由我们创建的,因为在这种情况下,“onBeforeRender”在某种程度上不会被调用。
protected void onBeforeRenderPage()
{
HttpServletRequest servletRequest = (HttpServletRequest) getRequest().getContainerRequest();
HttpServletResponse servletResponse = (HttpServletResponse) getResponse().getContainerResponse();
String method = servletRequest.getMethod();
logger.debug("Received a {} request from {}:{}", new Object[]{method, servletRequest.getRemoteAddr(),
servletRequest.getRemotePort()});
if (POST.equals(method)) {
try {
setModelFromBody(getRequestBody());
} catch (Exception e) {
//swallow this exception
}
doPost(getPageParameters(), servletRequest, servletResponse);
} else if (GET.equals(method)) {
doGet(getPageParameters(), servletRequest, servletResponse);
}
}
在相应的子类(JSon,Xml等)中,将方法“onRender()”替换为“renderPage()”并在执行任何其他操作之前调用我们的自定义编写的超级方法“onBeforeRenderPage”。它可能看起来像这样:
@Override
public final void renderPage()
{
super.onBeforeRenderPage();
getResponse().write(getJson());
}
就是这样,你现在准备再次享受优雅的检票口休息api,这次是wicket-1.5。
我测试了这个并使用它。
如果您有更好的意见,请分享。