На моей странице jsp есть форма, которая отправляет запрос POST сервлету, который проверяет несколько вещей из ввода формы, на основе результата этой проверки объявляет атрибут запроса, а затем перенаправляет запрос на тот же jsp, который должно показывать предупреждающее сообщение соответственно. Это мой сервлет:

req.setAttribute("error", "message");
req.getRequestDispatcher("/htmls/myjsp.jsp").forward(req, resp);

И тогда myjsp.jsp имеет:

 <script type="text/javascript">
    var msg ='<%request.getAttribute("error"); %>';

    if (msg != null && msg != "") {

        function alertName(){
            alert(msg);
        } 
    }
 </script> 

И в нижней части JSP:

<script type="text/javascript"> window.onload = alertName; </script>

Это не работает, msg всегда пустая строка. Строка правильно добавлена ​​как атрибут, но я предполагаю, что скрипт в jsp для получения этого атрибута неверен. В инструментах разработчика я вижу, что результирующий html:

 <script type="text/javascript">
    var msg ='';

    if (msg != null && msg != "") {

        function alertName(){
            alert(msg);
        } 
    }
 </script>

Это решение основано на принятом ответе здесь.

0
lbal 1 Окт 2022 в 20:12
Вы создаете новую функцию условно, к ней нельзя получить доступ через html
 – 
Konrad Linkowski
1 Окт 2022 в 20:13
Функция должна возвращать значение undefined, потому что в html такой функции нет. Скриптлеты очень не рекомендуются, особенно если вы не знаете, как их использовать.
 – 
Roman C
1 Окт 2022 в 21:16

1 ответ

Я исправил это, изменив

var msg ='<%request.getAttribute("error"); %>';

За

var msg = '${error}';

Работает как положено!

0
lbal 1 Окт 2022 в 21:02