Ответ 1
Это связано с тем, что переменная pgTitle
задана в области страниц. Проверьте здесь (извините, я не могу получить официальную документацию для этого).
Если вы хотите сделать эту работу, вам нужно как минимум установить переменную в области запроса. Чтобы установить переменную в области запроса, используйте атрибут scope
на <c:set>
:
<c:set var="pgTitle" value="Welcome" scope="request" />
В вашем комментарии, в веб-разработке, объем переменных имеет значение, поскольку он определяет, где можно использовать переменную (похожую на переменную, объявленную как поле в классе и переменную, объявленную локально в методе). В JSP есть четыре области, известные как контекст:
- Область страницы (обрабатывается PageContext). Переменные могут быть достигнуты только в том случае, если они заданы в качестве атрибутов на текущей странице. Это означает, что только текущая страница может получить доступ к этим атрибутам, включая страницы разных страниц, поэтому они не могут получить доступ к этим атрибутам.
- Область запроса (обрабатывается ServletRequest). Переменные могут быть достигнуты только в том случае, если они заданы в качестве атрибутов в текущем запросе. Это означает, что каждая страница, обрабатываемая одним и тем же запросом, может обращаться к этим атрибутам. Важное примечание: перенаправление подразумевает новый процесс запроса/ответа. Это означает, что если вы установите атрибуты в запросе и выполните перенаправление, эти атрибуты не будут установлены в качестве атрибутов нового запроса.
- Область сеанса (обрабатывается HttpSession). Переменные могут быть достигнуты только в том случае, если они установлены в качестве атрибутов текущего сеанса пользователя. Это означает, что каждая страница, используемая в одном сеансе пользователя, может использовать эти атрибуты до тех пор, пока они не будут удалены или сеанс не завершится.
- Область применения (обрабатывается ServletContext). Переменные могут быть достигнуты только в том случае, если они заданы в качестве атрибутов в текущем контексте. Это означает, что каждая страница каждого атрибута сеанса может обращаться к этим переменным до тех пор, пока они не будут удалены из SessionContext или веб-приложение не будет развернуто.
Дополнительная информация:
Является ли это правильным способом выполнения того, что я пытаюсь сделать?
Если есть сервлет или другой контроллер, который обрабатывает атрибуты, которые должны быть установлены в запросе (например, @Controller
из Spring MVC или JSF, управляемый bean), тогда установите атрибут там, а не на своей странице.
Лично для получения опыта и определения наилучшего объема переменных при использовании в веб-приложениях требуется некоторое время. Основные примеры:
- Разделение
String
на запятую для целей презентации будет влиять только на текущий вид, поэтому это можно установить в области страниц. - Ошибка и успешные сообщения лучше всего подходят для области запроса. Если пользователь обновляет страницу, он, вероятно, не должен видеть те же сообщения, если данные не будут повторно обработаны.
- Информация о пользователе как имя, псевдоним и предпочтения может быть задана в области сеанса.
- Если вам нужно отобразить список стран (которые не должны меняться через несколько дней), вы можете сохранить этот список в области приложения.