这是因为pgTitle
变量是在页面范围内设置的。在此处检查(抱歉,我无法获得有关此的官方文档)。
如果你想让这个工作,你至少必须在请求范围内设置变量。要在请求范围内设置变量,请使用以下scope
属性<c:set>
:
<c:set var="pgTitle" value="Welcome" scope="request" />
根据您的评论,在 Web 开发中,变量的范围很重要,因为它定义了可以在何处使用变量(类似于在类中声明为字段的变量和在方法中本地声明的变量)。JSP 中有四个范围称为上下文:
- 页面范围(由PageContext处理)。只有在当前页面中设置为属性时才能访问变量。这意味着,只有当前页面可以访问这些属性,包含的页面是不同的页面,所以它们不能访问这些属性。
- 请求范围(由ServletRequest处理)。只有在当前请求中设置为属性时才能访问这些变量。这意味着,在同一请求中处理的每个页面都可以访问这些属性。重要说明:重定向意味着新的请求/响应过程。这意味着,如果您在请求上设置属性并执行重定向,这些属性将不会被设置为新请求的属性。
- 会话范围(由HttpSession处理)。只有在当前用户会话中设置为属性时才能访问这些变量。这意味着,在同一用户会话中使用的每个页面都可以使用这些属性,直到它们被删除或会话过期。
- 应用程序范围(由ServletContext处理)。只有在当前上下文中设置为属性时才能访问变量。这意味着,每个会话属性上的每个页面都可以访问这些变量,直到它们从 SessionContext 中删除或取消部署 Web 应用程序。
更多信息:
这是完成我想做的事情的正确方法吗?
如果有一个 Servlet 或另一个控制器来处理要在请求中设置的属性(例如@Controller
,来自 Spring MVC 或 JSF 托管 bean),则在此处设置属性,而不是直接在您的页面中设置。
就个人而言,在 Web 应用程序上使用时,需要一些时间来获得经验并定义变量的最佳范围。基本示例:
- 用于演示目的的逗号拆分
String
仅影响当前视图,因此可以在页面范围内设置。
- 错误和成功消息最适合请求范围。如果用户更新页面,除非重新处理数据,否则他/她可能不会看到相同的消息。
- 可以在会话范围内设置用户信息,如姓名、昵称和首选项。
- 如果您必须显示国家/地区列表(几天内不应更改),您可以将此列表存储在应用程序范围内。