Могу ли я поместить JSP конкретный код во внешний файл сценария

Я хотел бы получить значения, отправленные Servlet с использованием HttpSession во внешнем js-файле, используя requirejs ' define функция:

define(function(){
    return {
        /*Get values from the java session*/
        gisuniqkey:<%=session.getAttribute('gisuniqkey')%>,
        scenario:<%=session.getAttribute('scenario')%>,
        operation:<%=session.getAttribute('operation')%>,
        objkey:<%=session.getAttribute('objkey')%>
    }
});

Можно ли сделать это? Какие-нибудь зависимости, которые я должен включить, делая это? Затмение говорит мне, что при этом возникает ошибка.

Сообщение об ошибке просто называет это синтаксической ошибкой:

 Uncaught SyntaxError: Unexpected token < java_to_script.js:3
 Uncaught TypeError: Cannot read property 'gisuniqkey' of undefined     
 gmaps_createScenario.js:15

Все, что меня волнует, это то, что я не использую глобальную переменную внутри моего jsp... и что она должна хорошо работать с require.js, было бы замечательно, если бы ее можно было сделать модулем многократного использования.

1 ответ

Решение

Вы не можете использовать JSP в статическом .js файл.

Вы можете использовать JSP в .jsp файл, который выводит файл JavaScript.

Вывести application/javascript тип контента, а затем напишите свой JS как обычно в .jsp файл, используя директивы JSP, вы хотите.

Обратите внимание, что, поскольку файл JavaScript будет запрашиваться отдельно от файла HTML, вы не сможете читать такие вещи, как строка запроса, используемая для запроса файла HTML, из директив JSP в файле JavaScript (хотя вы можете передать их через сеанс или добавить их в src из <script> элемент).


Однако, как правило, лучше придерживаться статических файлов JS и включать динамически сгенерированные JS как встроенные <script> в HTML-документе (хотя сведение такого JS к минимуму - достаточно для хранения необходимых вам данных). Это упрощает сортировку правил кэширования.

Другие вопросы по тегам