2010-12-22 45 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提交的。改變提交類型爲明白解決了問題。