пользовательские теги JSP
Пользовательские этикетки, определяемые пользователем элементы языка JSP. Когда страница JSP содержит пользовательский тег будет преобразован в сервлет, преобразование метки для объекта называется операции обработчика тега, которые при выполнении веб-контейнера сервлетов вызова этих операций.
Расширение тегов JSP позволяет создать новый ярлык и может быть вставлен непосредственно в страницу JSP. JSP 2.0 спецификации введены Простые Обработчики тегов, чтобы написать эти пользовательские теги.
Вы можете наследовать класс и переопределить Поддержке простого метода doTag (), чтобы разработать простые пользовательские метки.
Создание "Hello" ярлык
Далее, мы хотим создать собственный лейбл под названием <ех: Hello>, формат тегов:
<ex:Hello />
Для создания пользовательских тегов JSP, вы должны сначала создать сделку этикетка с классами Java. Итак, давайте создадим класс HelloTag, следующим образом:
package com.w3big; import javax.servlet.jsp.tagext.*; import javax.servlet.jsp.*; import java.io.*; public class HelloTag extends SimpleTagSupport { public void doTag() throws JspException, IOException { JspWriter out = getJspContext().getOut(); out.println("Hello Custom Tag!"); } }
Следующий код переопределяет метод doTag (), метод, используемый метод getJspContext (), чтобы получить текущий объект JspContext, и "Hello Custom Tag!" Передается объект JspWriter.
Обобщение вышеуказанных классов, и скопировать его в переменной окружения CLASSPATH каталога. И, наконец, создать следующую библиотеку тегов: <каталог установки Tomcat> WebApps \ ROOT \ WEB-INF \ custom.tld.
<taglib> <tlib-version>1.0</tlib-version> <jsp-version>2.0</jsp-version> <short-name>Example TLD</short-name> <tag> <name>Hello</name> <tag-class>com.w3big.HelloTag</tag-class> <body-content>empty</body-content> </tag> </taglib>
Далее, мы можем использовать тег Hello в файле JSP:
<%@ taglib prefix="ex" uri="WEB-INF/custom.tld"%> <html> <head> <title>A sample custom tag</title> </head> <body> <ex:Hello/> </body> </html>
Выше вывода программы:
Hello Custom Tag!
Вкладка Доступ тела
Вы можете быть как та же стандартная библиотека тегов содержит содержание сообщения в метке. Поскольку мы хотим включить содержание в Здравствуйте, мы пользовательский формат выглядит следующим образом:
<ex:Hello> This is message body </ex:Hello>
Мы можем изменить файл класса обработчика тега, следующим образом:
package com.w3big; import javax.servlet.jsp.tagext.*; import javax.servlet.jsp.*; import java.io.*; public class HelloTag extends SimpleTagSupport { StringWriter sw = new StringWriter(); public void doTag() throws JspException, IOException { getJspBody().invoke(sw); getJspContext().getOut().println(sw.toString()); } }
Далее нам нужно изменить файл TLD следующим образом:
<taglib> <tlib-version>1.0</tlib-version> <jsp-version>2.0</jsp-version> <short-name>Example TLD with Body</short-name> <tag> <name>Hello</name> <tag-class>com.w3big.HelloTag</tag-class> <body-content>scriptless</body-content> </tag> </taglib>
Теперь мы можем использовать измененную метку в JSP, следующим образом:
<%@ taglib prefix="ex" uri="WEB-INF/custom.tld"%> <html> <head> <title>A sample custom tag</title> </head> <body> <ex:Hello> This is message body </ex:Hello> </body> </html>
Приведенный выше вывод программы выглядит следующим образом:
This is message body
атрибуты пользовательского тега
Вы можете задать пользовательские критерии в различных свойствах, чтобы получить свойство, значение пользовательского класса тега должен реализовывать метод сеттер, методы JavaBean инкубационные заключаются в следующем:
package com.w3big; import javax.servlet.jsp.tagext.*; import javax.servlet.jsp.*; import java.io.*; public class HelloTag extends SimpleTagSupport { private String message; public void setMessage(String msg) { this.message = msg; } StringWriter sw = new StringWriter(); public void doTag() throws JspException, IOException { if (message != null) { /* 从属性中使用消息 */ JspWriter out = getJspContext().getOut(); out.println( message ); } else { /* 从内容体中使用消息 */ getJspBody().invoke(sw); getJspContext().getOut().println(sw.toString()); } } }
Название объекта является "сообщение", так что сеттер является setMessage (). Теперь давайте использовать TLD файл <атрибут> элемент, чтобы добавить этот объект:
<taglib> <tlib-version>1.0</tlib-version> <jsp-version>2.0</jsp-version> <short-name>Example TLD with Body</short-name> <tag> <name>Hello</name> <tag-class>com.w3big.HelloTag</tag-class> <body-content>scriptless</body-content> <attribute> <name>message</name> </attribute> </tag> </taglib>
Теперь мы можем использовать свойства сообщений в файле JSP, как показано ниже:
<%@ taglib prefix="ex" uri="WEB-INF/custom.tld"%> <html> <head> <title>A sample custom tag</title> </head> <body> <ex:Hello message="This is custom tag" /> </body> </html>
Примеры приведенных выше данных результат:
This is custom tag
Можно также включать в себя следующие свойства:
свойство | описание |
---|---|
имя | Определите имя свойства. Каждый тег является имя атрибута должно быть уникальным. |
требуется | Указывает, требуется ли атрибут или необязательным, если установлено ложное по желанию. |
rtexprvalue | При запуске выражение утверждение, атрибуты тега действительны. |
тип | Определите тип Java класс свойства. Значение по умолчанию определяется какString , |
описание | описание |
фрагмент | Если вы объявляете свойство, значение свойства будет рассматриваться какJspFragment. |
Эти атрибуты, связанные с указанным экземпляром:
..... <attribute> <name>attribute_name</name> <required>false</required> <type>java.util.Date</type> <fragment>false</fragment> </attribute> .....
Если вы используете два свойства, изменить файл TLD следующим образом:
..... <attribute> <name>attribute_name1</name> <required>false</required> <type>java.util.Boolean</type> <fragment>false</fragment> </attribute> <attribute> <name>attribute_name2</name> <required>true</required> <type>java.util.Date</type> </attribute> .....