[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-servlety-privedite-primer-ispolzovaniya-sobstvennykh-tegov":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":16,"progress":17,"seo":18},595,"privedite-primer-ispolzovaniya-sobstvennykh-tegov",13,"servlety","Сервлеты","🖧","Приведите пример использования собственных тегов","Практический пример: тег для форматирования числа по шаблону (функциональность, отсутствующая в стандартном JSTL).\n\n\u003Cdetails>\n\u003Csummary>Полный пример: TLD + Tag Handler + JSP\u003C\u002Fsummary>\n\nTLD-файл `\u002FWEB-INF\u002FexampleTag.tld`:\n\n```xml\n\u003C?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\u003Ctaglib version=\"2.1\" xmlns=\"http:\u002F\u002Fjava.sun.com\u002Fxml\u002Fns\u002Fj2ee\">\n    \u003Ctlib-version>1.0\u003C\u002Ftlib-version>\n    \u003Cshort-name>example\u003C\u002Fshort-name>\n    \u003Curi>\u002FWEB-INF\u002FexampleTag\u003C\u002Furi>\n    \u003Ctag>\n        \u003Cname>formatNumber\u003C\u002Fname>\n        \u003Ctag-class>xyz.company.FormatNumberTag\u003C\u002Ftag-class>\n        \u003Cbody-content>empty\u003C\u002Fbody-content>\n        \u003Cattribute>\n            \u003Cname>number\u003C\u002Fname>\n            \u003Crequired>true\u003C\u002Frequired>\n        \u003C\u002Fattribute>\n        \u003Cattribute>\n            \u003Cname>format\u003C\u002Fname>\n            \u003Crequired>true\u003C\u002Frequired>\n        \u003C\u002Fattribute>\n    \u003C\u002Ftag>\n\u003C\u002Ftaglib>\n```\n\nTag Handler `xyz.company.FormatNumberTag.java`:\n\n```java\npublic class FormatNumberTag extends TagSupport {\n    private String number;\n    private String format;\n\n    \u002F\u002F setters для атрибутов\n    public void setNumber(String number) { this.number = number; }\n    public void setFormat(String format) { this.format = format; }\n\n    @Override\n    public int doStartTag() throws JspException {\n        try {\n            DecimalFormat df = new DecimalFormat(format);\n            double val = Double.parseDouble(number);\n            pageContext.getOut().print(df.format(val));\n        } catch (IOException e) {\n            throw new JspException(e);\n        }\n        return SKIP_BODY;\n    }\n}\n```\n\nJSP-страница:\n\n```jsp\n\u003C%@ taglib uri=\"\u002FWEB-INF\u002FexampleTag.tld\" prefix=\"my\" %>\n\u003Cmy:formatNumber number=\"123456.789\" format=\"#,###.00\"\u002F>\n\u003C!-- Результат: 123,456.79 -->\n```\n\n\u003C\u002Fdetails>\n\nПользовательские теги с входными параметрами позволяют создавать переиспользуемые компоненты с декларативным интерфейсом. Атрибуты тега объявляются в TLD и маппятся на setter-методы Tag Handler.\n\n> **На собеседовании:** достаточно описать структуру (TLD + Handler + JSP) и привести простой пример с атрибутами. Не обязательно помнить точный XML-синтаксис TLD.","","junior",[15],"servlets",[],null,{"title":19,"description":20,"ogTitle":19,"ogDescription":20,"keywords":21,"schemaAnswer":20,"featuredSnippetReady":22},"Приведите пример использования собственных тегов — Gymterview","Практический пример: тег для форматирования числа по шаблону (функциональность, отсутствующая в стандартном JSTL).",[15,13],true]