Latest web development tutorials

пользовательские теги 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>
.....