2012-11-28 54 views
1

我想知道是否有方法從Struts2動作(處理jsp後的最終HTML)下載生成的HTML,使用正常的結果類型。我不想顯示de頁面,而是下載它。下載struts2生成的HTML

我曾嘗試:

<result name="success" type="stream"> 
    <param name="location">/jsp/dummy.jsp</param> 
    <param name="contentType">application/text</param> 
    <param name="contentDisposition">attachment; filename="page.html"</param> 
</result> 

我不希望使用這樣的:因爲我有一些編碼問題

UrlReader.read("generateHTMLAction") 

,並把該輸入流。 任何想法都會被認可。 謝謝大家。

+0

你爲什麼要從瀏覽器中得到這個信息,你可以在哪裏查看源代碼?在任何情況下,不,不使用默認結果類型。您始終可以使用普通濾鏡來更改MIME類型。 –

+0

難道你不能只使用標準調度程序結果類型並使用JSP指令適當地設置HTTP標頭嗎? – chad

+0

@DaveNewton我的代碼用於從多個表中生成jqgrid列表。它們是使用反射生成的,以適應Bean的屬性名稱和類型。我希望用戶能夠爲每個表格下載HTML,並根據需要使用它。 – German

回答

1

返回響應的處理大部分由HTTP標頭確定,以及它們如何由瀏覽器解釋。所以,據我所知,你可以使用標準的調度器結果類型和一個JSP。您可以使用JSP指令來設置適當的HTTP標頭,使瀏覽器以您喜歡的任何方式處理響應負載。

+0

好了,終於我實現了'ServletResponseAware'的行動,並增加了行
'response.setHeader(「內容處置」,「附件;文件名=」 +豆腐+」 .jsp「);'以避免修改jsp。 struts.xml仍然很簡單。 '/jsp/page.jsp'非常感謝大家的幫助@chad @DaveNewton – German

+0

沒有汗水。出於好奇,你爲什麼要把頭文件保存在jsp中? – chad

+0

我使用jsp進行顯示和下載,所以我有兩個不同的動作調用相同的jsp。所以爲了避免向jsp添加邏輯,我只修改了其中一個Actions。我知道,我知道,我很混亂,但看到我的其他人的問題,你會知道我在做通用的東西。 – German

0

我不知道IF或HOW是否可以完成;

什麼我可以對你說的是:

  • 它這裏不存在任何location PARAM:它不同於其他結果類型(DispatchResult,FreeMarker的,等等),而不是從Stream type。不錯的嘗試,但我敢肯定Struts2的結果類型中沒有任何東西可以滿足您的需求;

  • 您不能使用Interceptor's PreResultListener功能,因爲它在最終結果上工作,但在它被渲染之前,然後完全跳出攔截器;

    我的2美分:

    ,如果你想爲調試目的這樣做,而不是編程,然後真正的問題是,你不能使用View Source瀏覽器的功能,因爲結果已經被「污染」瀏覽器解析,那麼你可以嘗試使用PlainText result type(未經測試,這只是一個想法,我從來沒有使用它),以獲得JSP的原始內容,最終設置charSet,然後用適當的方式讀取原始JSP編輯器(Eclipse,Notepad ++等)。

+1

明文結果返回未解析的JSP/etc。查看源代碼與查看DOM不同,例如,如果您打開Web開發人員標記,它不在源代碼中,但在打開檢查器時位於DOM中。 –

+0

謝謝,這是真正的* *原料呢:) –