Wicket:重定向到共享资源

时间:2010-12-22 00:31:39

标签: redirect resources wicket

我有一个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) - 一切正常,文件格式良好且可下载。

我还有什么需要做的吗?它最有可能是愚蠢的东西,但我已经在墙壁上敲了一天... ...

1 个答案:

答案 0 :(得分:0)

问题解决了。浏览器不处理响应的原因是表单是使用AJAX提交的。将提交类型更改为plain解决了问题。