在JSP中,我如何动态设置contentType?

5

I have a very simple JSP that looks like this:

<%@ page contentType="application/json" %>${actionBean.response}
actionBean.response 返回一个String。有时该字符串是具有“application/json” contentType 的 json,但有时该字符串是具有“application/javascript” contentType 的jsonp。但我无法弄清楚如何动态设置contentType的值。
  1. 我尝试在contentType周围使用<c:choose>,但出现错误,提示我不能两次设置contentType。
  2. 我尝试使用EL作为属性值,但它不会被扩展。
有没有一种方式可以动态设置这个值?
2个回答

4
您可以尝试使用脚本片段(不是最理想的方法,但我不确定是否有其他方法),就像这样: ```<% // your Java code here %>```
<%
    if (actionBean.isJson()) {
        response.setContentType("application/json");
    } else if (actionBean.isJsonp()) {
        response.setContentType("application/javascript");
    }
%>

编辑:如Joop在评论中提到的,确保不使用@page指令设置contentType。

1
@page指令中省略contentType属性。 - Joop Eggen

0

我认为jsp不是用来做这个的。您可以在javascript函数中捕获JSON响应,而无需声明内容类型。

我也从未见过任何jsp页面变成javascript文件。

您可以同时使用<s:property name="something" escapeHtml="false" escapeJavascript="false"/>


我不认为JSP的目的是做“那件事”,这个句子中的“那件事”具体指什么? - Daniel Kaplan
JSON在JavaScript中使用,所以我们使用AJAX调用并捕获结果并解析。关于JavaScript,它不应该是动态的,因此您应该能够使用<script src='url'/>声明。动态值应该在您的页面中初始化。 - tom
我认为你对我在这里尝试做什么作出了错误的假设。这个JSP正在返回API调用的响应。 - Daniel Kaplan
但是为什么API调用需要带有内容类型JSON的JSP呢? JSON显然应该由JavaScript或Java负责,而不是渲染引擎。 - tom
1
我想我不需要一个。但从技术上讲,返回API响应的内容是一种渲染形式。 - Daniel Kaplan
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接