所以,我用freemarker模板和struts2来表达我的回答。但是,因为我也在尝试使用taconite,所以我需要以“text/xml”的内容类型发送响应。我似乎找不到一种使用freemarker指令来设置内容类型的方法,而且我对struts还不够精通,不知道是否有办法做到这一点。那么,我该怎么办呢?
yfjy0ee71#
或者,如果您喜欢注解:
@Result(name=SUCCESS, location="...", params={"contentType", "text/html"})
vsaztqbk2#
也可以在struts.xml中进行设置
<action name="..." class="..."> <result name="SUCCESS"> <param name="contentType">text/html</param>
5w9g7ksd3#
在action类中,实现ServletResponseWare接口,并使用简单的:
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; } }
更多信息here:http://www.roseindia.net/struts/struts2/strutsresources/access-request-response.shtml
6ovsh4lw4#
实施 ServletResponseAware 可能在其他情况下也适用,但对freemarker和struts2没有帮助。:-(我用调试器查了一下,发现。。。通过实施 ServletResponseAware ,我获得了对响应的访问权限,并且可以从我的操作更改内容类型。很好。一旦我的行动完成,控制很快就结束了 org.apache.struts2.views.freemarker.FreemarkerResult ,它将呈现模板方法 preTemplateProcess() 设置响应的内容类型,忽略我设置的值:-(显然有一个“自定义属性”可以用来覆盖它,但我还没有在google中找到任何解释这个 FreemarkerResult 类本身可以将内容类型设置为覆盖默认值,但是。。。还不确定可以从哪里设置,也许是在struts配置中?到目前为止,似乎操作还不能设置内容类型,但幸运的是,正如thomas在上面所指出的,这会覆盖所有这些: ${response.setContentType("text/xml")} 所以至少从模板上是可能的。当然,给一组生成xml的操作提供一个处理这些操作的公共超类会更简单、更安全。。。
ServletResponseAware
org.apache.struts2.views.freemarker.FreemarkerResult
preTemplateProcess()
FreemarkerResult
${response.setContentType("text/xml")}
2hh7jdfx5#
回答了我自己的问题:在模板的类型处使用以下代码:
5条答案
按热度按时间yfjy0ee71#
或者,如果您喜欢注解:
vsaztqbk2#
也可以在struts.xml中进行设置
5w9g7ksd3#
在action类中,实现ServletResponseWare接口,并使用简单的:
更多信息here:http://www.roseindia.net/struts/struts2/strutsresources/access-request-response.shtml
6ovsh4lw4#
实施
ServletResponseAware
可能在其他情况下也适用,但对freemarker和struts2没有帮助。:-(我用调试器查了一下,发现。。。通过实施
ServletResponseAware
,我获得了对响应的访问权限,并且可以从我的操作更改内容类型。很好。一旦我的行动完成,控制很快就结束了
org.apache.struts2.views.freemarker.FreemarkerResult
,它将呈现模板方法
preTemplateProcess()
设置响应的内容类型,忽略我设置的值:-(显然有一个“自定义属性”可以用来覆盖它,但我还没有在google中找到任何解释
这个
FreemarkerResult
类本身可以将内容类型设置为覆盖默认值,但是。。。还不确定可以从哪里设置,也许是在struts配置中?到目前为止,似乎操作还不能设置内容类型,但幸运的是,正如thomas在上面所指出的,这会覆盖所有这些:
${response.setContentType("text/xml")}
所以至少从模板上是可能的。当然,给一组生成xml的操作提供一个处理这些操作的公共超类会更简单、更安全。。。2hh7jdfx5#
回答了我自己的问题:
在模板的类型处使用以下代码: