В JSP, как я могу динамически установить contentType?

У меня есть очень простой JSP, который выглядит так:

<%@ page contentType="application/json" %>${actionBean.response}

actionBean.response возвращает String. Иногда это строка json с типом содержимого «application/json», но иногда эта строка представляет собой jsonp с типом содержимого «application/javascript». Но я не могу понять, как динамически установить значение contentType.

  1. Я пытался использовать <c:choose> вокруг contentType, но это дает мне сообщение об ошибке, говорящее, что я не могу установить contentType дважды.
  2. Я пытался использовать EL для значения атрибута, но он не расширяется.

Есть ли способ динамически установить это значение?


person Daniel Kaplan    schedule 19.07.2013    source источник


Ответы (2)


Вы можете попробовать использовать скриптлеты (не идеально, но я не уверен, что есть другой способ), например:

<%
    if (actionBean.isJson()) {
        response.setContentType("application/json");
    } else if (actionBean.isJsonp()) {
        response.setContentType("application/javascript");
    }
%>

Изменить: И, как упоминает Джуп в комментариях, убедитесь, что вы не устанавливаете contentType с помощью директивы @page.

person nerdherd    schedule 23.07.2013
comment
И исключив атрибут contentType из директивы @page. - person Joop Eggen; 23.07.2013
comment
Я попробую и отмечу это как ответ, если это сработает. Спасибо - person Daniel Kaplan; 23.07.2013

Я не думаю, что jsp предназначены для этого. Вы бы захватили ответ JSON в функции javascript без необходимости объявлять тип контента.

Я также никогда не видел, чтобы страница jsp превращалась в файл javascript.

Вы можете использовать <s:property name="something" escapeHtml="false" escapeJavascript="false"/> для обоих.

person tom    schedule 19.07.2013
comment
Я не думаю, что JSP предназначены для этого, что именно это означает в этом предложении? - person Daniel Kaplan; 19.07.2013
comment
иметь тип контента, отличный от всего, что находится в диапазоне html (я могу ошибаться в этом, но за 6 лет разработки jsp со стойками я никогда его не видел) - person tom; 19.07.2013
comment
Хорошо, так что бы вы сделали вместо этого? - person Daniel Kaplan; 19.07.2013
comment
Что ж, JSON используется в javascript, поэтому мы используем вызовы ajax, фиксируем результат и анализируем его. Что касается javascript, он не должен быть динамическим, поэтому вы должны иметь возможность использовать объявление ‹script src='url'/›. Динамические значения должны быть инициализированы на вашей странице. - person tom; 19.07.2013
comment
Я думаю, вы делаете неправильное предположение о том, что я пытаюсь здесь сделать. Этот JSP возвращает ответ на вызов API. - person Daniel Kaplan; 19.07.2013
comment
Но зачем вызову API нужен jsp с типом контента json? Конечно, за json отвечает либо javascript, либо java, но не механизм рендеринга. - person tom; 19.07.2013
comment
Полагаю, мне это не нужно. Но технически возврат содержимого ответа API — это форма рендеринга. - person Daniel Kaplan; 19.07.2013