2009-11-04 77 views
3

因此,我使用帶有Struts2的freemarker模板來制定我的響應。但是,因爲我也嘗試使用taconite,所以我需要將響應與「text/xml」的內容類型一起發送。我似乎無法找到使用freemarker指令來設置內容類型的方法,並且我對struts中的知識是否足夠了解,知道是否有辦法通過它來完成。在Struts2中設置響應的內容類型

那麼,我該怎麼辦呢?

回答

6

O R您可以將其設置在struts.xml中

<action name="..." class="..."> 
    <result name="SUCCESS"> 
    <param name="contentType">text/html</param> 
+0

這爲我工作,不知道爲什麼別人說它沒有。 – 3urdoch 2011-11-25 09:58:11

+0

這個描述了我需要做的速度:http://blog.bielu.com/2008/05/struts-velocity-and-flexible-content.html – depsypher 2012-06-26 22:50:08

0

回答我自己的問題:

使用的模板類型下面的代碼:

${response.setContentType("text/xml")} 
7

在你的Action類,實現了ServletResponseAware接口,並且使用簡單:

package your.package; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import com.opensymphony.xwork2.ActionSupport; 
import org.apache.struts2.interceptor.ServletRequestAware; 
import org.apache.struts2.interceptor.ServletResponseAware; 

public class YourAction extends ActionSupport implements 
       ServletResponseAware { 

    private HttpServletResponse response; 

    public String execute() throws Exception{ 
    response.setContentType("image/png"); 
    return SUCCESS; 
    } 

    public void setServletResponse(HttpServletResponse response){ 
    this.response = response; 
    } 

    public HttpServletResponse getServletResponse(){ 
    return response; 
    } 
} 

更多的信息在這裏:http://www.roseindia.net/struts/struts2/strutsresources/access-request-response.shtml

+2

這爲我工作 - 而不是接受了一個。 – Fakrudeen 2010-08-03 11:03:52

+0

更通用的解決方案。 – mac 2013-04-08 16:52:19

2

實施ServletResponseAware在其他情況下可能會奏效,但它不具有的Freemarker和Struts2的幫助。 :-(我只是一個調試器追蹤事情的經過,並發現......通過實施ServletResponseAware

  • ,我得到了進入反應,我可以改變的內容類型,從我的行動。好。

  • 一次我的動作做,很快控制在org.apache.struts2.views.freemarker.FreemarkerResult結束了,這使得模板

  • preTemplateProcess()設置響應的內容類型,而忽略了那些本來:-(

  • 值的方法210
  • 顯然有可能被用於替代這是一個「自定義屬性」,但我還沒有發現在谷歌尚未

  • FreemarkerResult類本身的任何解釋可以有一個內容類型設置爲覆蓋默認,但是......不確定那裏可以設置,也許在一個struts配置?

所以到目前爲止,它似乎並不動作可以設置內容類型,幸好托馬斯上面所指出的,這將覆蓋所有:

${response.setContentType("text/xml")}

所以至少它是可能來自模板。當然會更容易和更安全地給一組XML產生作用的通用超認爲需要照顧這...

1

或者,如果你喜歡註釋:

@Result(name=SUCCESS, location="...", params={"contentType", "text/html"})