我有一個檢票窗體,提交時應該給用戶一個文件下載。該文件由外部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
) - 一切正常,文件格式良好並可下載。
有什麼額外的我必須做的?這很可能是一些愚蠢的事情,但我一直在毆打我的頭再次牆壁已經有一天了......
你能發佈onSubmit()處理程序的相關部分嗎? – bert 2010-12-22 06:36:31