2010-12-22 88 views
0

我有一个检票窗体,提交时应该给用户一个文件下载。该文件由外部servlet(基于表单)生成,该servlet将生成的内容写入响应的输出流。Wicket:重定向到共享资源

通常这可以使用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)); 

然后靠检票口的内部处理方式有关。

调试时,我可以清楚地看到我的共享资源被正确调用,外部servlet的响应正确生成,提取,然后写入当前响应与所有标题和东西,但没有任何反应后,没有错误,只是没有。

当我直接调用我的共享资源指定url wicket已将其绑定到(如http://localhost:8080/webAppRoot/wicket/myResource?param1=value) - 一切正常,文件格式良好并可下载。

有什么额外的我必须做的?这很可能是一些愚蠢的事情,但我一直在殴打我的头再次墙壁已经有一天了......

+0

你能发布onSubmit()处理程序的相关部分吗? – bert 2010-12-22 06:36:31

回答

0

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