You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JSP中使用JSTL的MessageFormat格式化字符串并替换占位符

没问题,这俩问题我都帮你捋清楚,一步步来:

问题1:JSTL中使用MessageFormat格式化字符串

首先得确保你已经在JSP页面顶部引入了JSTL的fmt标签库——这是用JSTL做格式化的前提:

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

JSTL的fmt标签底层就是基于java.text.MessageFormat实现的,所以占位符规则完全一致,常见用法分两种场景:

  • 直接格式化硬编码字符串
    如果你的格式化模板是直接写在JSP里的,用<fmt:formatMessage>配合<fmt:param>传入占位符参数就行:
<fmt:formatMessage value="欢迎{0},您的当前积分是{1}">
    <fmt:param value="${user.nickname}"/>
    <fmt:param value="${user.score}"/>
</fmt:formatMessage>
  • 从资源属性文件读取模板并格式化
    如果模板存在外部属性文件(比如messages.properties)里,先通过<fmt:setBundle>绑定资源束,再用<fmt:message>调用:
    假设messages.properties里有:user_greeting=欢迎{0},您的当前积分是{1}
    JSP代码:
<fmt:setBundle basename="com.yourproject.messages" var="msgBundle"/>
<fmt:message key="user_greeting" bundle="${msgBundle}">
    <fmt:param value="${user.nickname}"/>
    <fmt:param value="${user.score}"/>
</fmt:message>
问题2:替换环境变量字符串中的{0}为当前年份

针对这个需求,有两种实用的实现方式,你可以根据代码风格选择:

方式一:Java脚本直接处理(简单直接)

直接在JSP里写少量脚本,结合MessageFormat完成替换,适合快速实现:

<%
// 从环境变量获取版权模板
String copyrightTemplate = System.getenv("NEW_COPYRIGHT");
// JDK8+推荐用LocalDate获取当前年份,更简洁直观
int currentYear = java.time.LocalDate.now().getYear();
// 格式化替换占位符
String finalCopyright = java.text.MessageFormat.format(copyrightTemplate, currentYear);
%>
<%= finalCopyright %>

如果是JDK7及以下版本,改用Calendar获取年份:

<%
String copyrightTemplate = System.getenv("NEW_COPYRIGHT");
java.util.Calendar cal = java.util.Calendar.getInstance();
int currentYear = cal.get(java.util.Calendar.YEAR);
String finalCopyright = java.text.MessageFormat.format(copyrightTemplate, currentYear);
%>
<%= finalCopyright %>

方式二:用JSTL标签实现(无脚本风格)

如果想尽量减少JSP中的Java脚本,用JSTL标签也能搞定,记得先引入c和fmt标签库:

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%-- 先把环境变量的值存入pageContext,方便EL表达式访问 --%>
<% pageContext.setAttribute("copyrightTemplate", System.getenv("NEW_COPYRIGHT")); %>

<%-- 用LocalDate获取当前年份(JDK8+) --%>
<jsp:useBean id="now" class="java.time.LocalDate"/>

<%-- 用fmt标签完成格式化替换 --%>
<fmt:formatMessage value="${copyrightTemplate}">
    <fmt:param value="${now.year}"/>
</fmt:formatMessage>

两种方式最终都能把Copyright © {0} XXX中的{0}替换为当前年份,输出你想要的Copyright © 2018 XXX效果。

内容的提问来源于stack exchange,提问作者L.L

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 02:29:08