Đây là một câu hỏi cũ, nhưng tôi tìm thấy nó là rất tốt nhất để làm một tld tùy chỉnh trong trường hợp này: mà không có bất kỳ chuyển đổi kép đến và đi từ chuỗi.
Làm tệp tld của riêng bạn, sau đó ghi đè lên lớp FormatDate. Cuối cùng, khai báo tiền tố tùy chỉnh của riêng bạn và sử dụng tùy chỉnh: formatDate thay vì fmt: formatDate.
đây là một phiên bản đơn giản
sử dụng trong JSP:
<%@ taglib uri="/WEB-INF/custom" prefix="custom" %>
...
<custom:formatDate value="${std.datum}" pattern="dd/MM/yyyy" />
WEB-INF/custom.tld tập tin
<?xml version="1.0" encoding="UTF-8"?>
<tag ib version="2.0" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd">
<tag>
<description>
FormatDate with java8 type
</description>
<name>formatDate</name>
<tag-class>com.custom.tag.FormatDateTag</tag-class>
<body-content>empty</body-content>
<attribute>
<description>
Date and/or time to be formatted.
</description>
<name>value</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<description>
Custom formatting style for dates and times.
</description>
<name>pattern</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
Sau đó tag file class java
public class FormatDateTag extends TagSupport {
protected Temporal value;
protected String pattern;
private String var;
private int scope;
public FormatDateTag()
{
super();
init();
}
private void init()
{
this.pattern = this.var = null;
this.value = null;
this.scope = PageContext.PAGE_SCOPE;
}
public void setVar(final String var)
{
this.var = var;
}
public void setScope(final String scope)
{
this.scope = Util.getScope (scope);
}
public void setValue(final Temporal value)
{
this.value = value;
}
public void setPattern(final String pattern)
{
this.pattern = pattern;
}
@Override
public int doEndTag() throws JspException
{
String formatted = null;
if (this.value == null)
{
if (this.var != null)
{
this.pageContext.removeAttribute (this.var, this.scope);
}
return EVAL_PAGE;
}
// Create formatter
if (this.pattern != null)
{
final DateTimeFormatter formatter = DateTimeFormatter.ofPattern (this.pattern);
formatted = formatter.format (this.value);
}
else
{
// no formatting locale available, use Date.toString()
formatted = this.value.toString();
}
if (this.var != null)
{
this.pageContext.setAttribute (this.var, formatted, this.scope);
}
else
{
try
{
this.pageContext.getOut().print (formatted);
}
catch (final IOException ioe)
{
throw new JspTagException (ioe.toString(), ioe);
}
}
return EVAL_PAGE;
}
@Override
public void release()
{
init();
}
}
Theo thông báo 'Không thể chuyển đổi ert 2015-02-14 của lớp java.time.LocalDate vào lớp java.util.Date', thẻ JSTL '' không hỗ trợ 'java.time.LocalDate' được giới thiệu trong Java 8. –
Tiny
http://www.tech.theplayhub.com/jstl_formatdate_and_java-time-localdate/ –