在JSTL fmt
标记库中,标记为formatDate
,其中包含可选属性var
。使用formatDate
标记时,您可以通过var
属性传入一个字符串,该属性指定将要创建的变量的名称,其值将是格式化的日期字符串。
不幸的是,Java(从Java 8开始)并不支持我需要的汤加和萨摩亚语言环境。因此,同事创建了一个自定义日期格式标记,基本上只使用fmt:formatDate
格式化日期,但随后(在Tongan和Samoan的情况下)用适当的翻译替换日期名称和月份名称值。但是,此自定义标记仅输出(使用c:out
)结果,并且我希望增强自定义标记以便能够创建变量,就像fmt:formatDate
一样。不幸的是,我不知道如何。
c:set
不允许在var
属性中使用表达式,并且由于某种原因,pageContext
在自定义标记文件(date-formatter.tag)中为空。
这就是我对标签定义的看法,减去无关的细节(假设包含c
和fmt
taglib,以及dateFormatterLocale
变量):
<%@attribute name="value" type="java.util.Date" required="true" rtexprvalue="true" description="..." @>
<%@attribute name="type" required="true" rtexprvalue="true" description="..." %>
<%@attribute name="pattern" required="true" rtexprvalue="true" description="..." %>
<%@attribute name="var" required="false" rtexprvalue="false" description="..." %>
<fmt:formatDate type="${type}" pattern="${pattern}" value="${value}" var="dfFormattedDate" />
<c:if test="${((dateFormatterLocale == 'to') || (dateFormatterLocale == 'sm'))}">
...
[stuff to translate day names and month names]
...
</c:if>
<c:choose>
<c:when test="${not empty var}">
<%-- SOMEHOW SET VARIABLE WHOSE NAME IS THE VALUE OF "var" AND WHOSE VALUE IS THE VALUE OF dfFormattedDate --%>
</c:when>
<c:otherwise>
<c:out value="${dfFormattedDate}" />
</c:otherwise>
</c:choose>
答案 0 :(得分:0)
在所需的范围地图上使用<c:set>
target
,在property
使用${var}
。
E.g。如果你需要它作为请求范围:
<c:set target="${requestScope}" property="${var}" value="${dfFormattedDate}" />
或页面范围:
<c:set target="${pageScope}" property="${var}" value="${dfFormattedDate}" />