junior
Приведите пример использования собственных тегов
Практический пример: тег для форматирования числа по шаблону (функциональность, отсутствующая в стандартном JSTL).
Полный пример: TLD + Tag Handler + JSP
TLD-файл /WEB-INF/exampleTag.tld:
<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.1" xmlns="http://java.sun.com/xml/ns/j2ee">
<tlib-version>1.0</tlib-version>
<short-name>example</short-name>
<uri>/WEB-INF/exampleTag</uri>
<tag>
<name>formatNumber</name>
<tag-class>xyz.company.FormatNumberTag</tag-class>
<body-content>empty</body-content>
<attribute>
<name>number</name>
<required>true</required>
</attribute>
<attribute>
<name>format</name>
<required>true</required>
</attribute>
</tag>
</taglib>
Tag Handler xyz.company.FormatNumberTag.java:
public class FormatNumberTag extends TagSupport {
private String number;
private String format;
// setters для атрибутов
public void setNumber(String number) { this.number = number; }
public void setFormat(String format) { this.format = format; }
@Override
public int doStartTag() throws JspException {
try {
DecimalFormat df = new DecimalFormat(format);
double val = Double.parseDouble(number);
pageContext.getOut().print(df.format(val));
} catch (IOException e) {
throw new JspException(e);
}
return SKIP_BODY;
}
}
JSP-страница:
<%@ taglib uri="/WEB-INF/exampleTag.tld" prefix="my" %>
<my:formatNumber number="123456.789" format="#,###.00"/>
<!-- Результат: 123,456.79 -->
Пользовательские теги с входными параметрами позволяют создавать переиспользуемые компоненты с декларативным интерфейсом. Атрибуты тега объявляются в TLD и маппятся на setter-методы Tag Handler.
На собеседовании: достаточно описать структуру (TLD + Handler + JSP) и привести простой пример с атрибутами. Не обязательно помнить точный XML-синтаксис TLD.