我有一个wicket表单,在提交时应该给用户一个文件下载。该文件由外部servlet(基于表单)生成,该servlet将生成的内容写入响应的输出流。
通常可以在表单提交时使用getRequestCycle().setRequestTarget(new RedirectRequestTarget(redirectUrl);
来完成,其中redirectUrl
将是带有参数的外部servlet的url。
然而,redirectUrl
显示在浏览器的地址栏中,由于用户看不到参数值,因此这不好。
为了克服这个问题,我实现了一个自定义DynamicWebResource
,它将servlet输出作为byte[]
获取,并通过通常的wicket共享资源机制绑定到虚拟URL。
在表单提交上,我执行以下操作:
RequestParameters rps = new RequestParameters();
rps.setResourceKey(new ResourceReference("myResource").getSharedResourceKey());
getRequestCycle().setRequestTarget(new SharedResourceRequestTarget(rps));
然后依靠wicket的内部处理方式。
调试时我可以清楚地看到我的共享资源被正确调用,外部servlet的响应被正确生成,获取,然后写入当前响应的所有标题和内容,但之后没有任何反应,没有错误,只是没有
当我调用我的共享资源时直接指定url wicket已绑定到它(如http://localhost:8080/webAppRoot/wicket/myResource?param1=value
) - 一切正常,文件格式良好且可下载。
我还有什么需要做的吗?它最有可能是愚蠢的东西,但我已经在墙壁上敲了一天... ...
答案 0 :(得分:0)
问题解决了。浏览器不处理响应的原因是表单是使用AJAX提交的。将提交类型更改为plain解决了问题。