Java fmt:将无意中的逗号添加到数字中的消息
我发现格式标记库有奇怪的行为。我正在格式化网页页脚中的版权信息。我正在使用以下伪代码:Java fmt:将无意中的逗号添加到数字中的消息,java,jsp,jstl,Java,Jsp,Jstl,我发现格式标记库有奇怪的行为。我正在格式化网页页脚中的版权信息。我正在使用以下伪代码: <fmt:message var="copyright" key="someKey"> <fmt:param value="${year}"/> </fmt:message> ... <c:out value="${copyright}"/> ... 我只是将这一年作为一个参数传递到资源包中。如果在传入年份值之前先将其c-out: <c:
<fmt:message var="copyright" key="someKey">
<fmt:param value="${year}"/>
</fmt:message>
...
<c:out value="${copyright}"/>
...
我只是将这一年作为一个参数传递到资源包中。如果在传入年份值之前先将其c-out:
<c:out value="${year}"/>
<%-- renders as 2012 --%>
但是在参数传递之后,年份被格式化为一个数字。数字呈现为2012
我在谷歌上搜索了一下,四处打听,除了一般的Oracle文档之外,我什么也没找到()
还有其他人做到了吗
提前谢谢。我也遇到了同样的问题,但在玩过之后发现只有数字类型会被格式化。如果先将年份设置为字符串,则不会:
Calendar cal = Calendar.getInstance();
int currYear = cal.get(Calendar.YEAR);
String cYear = Integer.toString(currYear);
<fmt:message key="msg.parameterized"><fmt:param value="<%=currYear%>"/></fmt:message>
<fmt:message key="msg.parameterized"><fmt:param value="<%=cYear%>"/></fmt:message>
Calendar cal=Calendar.getInstance();
int currYear=cal.get(日历年);
字符串cYear=Integer.toString(currYear);
第一个将包含2012,第二个仅包含2012,它被解释为by,因此被格式化为数千分隔符,可以是逗号或点,具体取决于当前区域设置。通过添加以下内容,可以防止将其解释为编号:
虽然它简单且表面上有效,但我觉得它有点不纯洁。首先,有一天,其他人可能会出现,想知道这个额外的角色到底是为了什么,甚至可能会把它删除
由于
在后台使用了Java的内置类,因此我们可以在ResourceBundle的消息字符串本身中插入一个格式化模式
例如,在ResourceBundle中,您可以有:
someKey = Copyright (c) {0,number,#} ACME Inc.
这里的#
实际上可以是类中记录的任何格式字符串。在这种情况下,#
只输出数字,不需要任何额外的格式
另外,由于在这个特定实例中,您希望输出一年,因此可以在
中将java.util.Date实例作为值传递,并在ResourceBundle中使用以下内容:
someKey = Copyright (c) {0,date,yyyy} ACME Inc.
在这种情况下,可以使用任何格式字符串代替yyyy