Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java fmt:将无意中的逗号添加到数字中的消息_Java_Jsp_Jstl - Fatal编程技术网

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