Latest web development tutorials

tags personalizadas JSP

etiquetas personalizadas são elementos de linguagem JSP definidas pelo usuário. Quando a página JSP contém uma marca personalizada será convertido para servlet, conversão de rótulo para o objeto é chamado operações de um manipulador de tag que, quando executado chamada servlet contêiner da Web essas operações.

JSP extensão tag permite que você crie um novo rótulo e pode ser inserido diretamente em uma página JSP. JSP especificação 2.0 introduziu manipuladores de Tag simples de escrever estas tags personalizados.

Você pode herdar classe SimpleTagSupport e substituir o método doTag () para desenvolver um simples etiquetas personalizadas.


Criar uma etiqueta "Olá"

Em seguida, queremos criar um rótulo personalizado chamado <ex: Olá>, o formato tag:

<ex:Hello />

Para criar um personalizado tags JSP, é necessário primeiro criar um negócio etiqueta com classes Java. Então, vamos criar uma classe HelloTag, como segue:

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!");
  }
}

O código a seguir substitui o método doTag (), o método utilizado método getJspContext () para obter o objeto JspContext atual, e "Tag Olá feita sob encomenda!" É passado para JspWriter objeto.

Compilar as classes acima, e copiá-lo para o diretório CLASSPATH variável de ambiente. Finalmente, crie a seguinte biblioteca de tags: <diretório de instalação do 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>

Em seguida, podemos usar a tag Olá em um arquivo JSP:

<%@ taglib prefix="ex" uri="WEB-INF/custom.tld"%>
<html>
  <head>
    <title>A sample custom tag</title>
  </head>
  <body>
    <ex:Hello/>
  </body>
</html>

A saída do programa acima é:

Hello Custom Tag!

corpo guia Acesso

Você pode ser como a mesma biblioteca de tags padrão contém o conteúdo da mensagem no rótulo. Como queremos incluir conteúdo em Olá, nós costume formato é o seguinte:

<ex:Hello>
   This is message body
</ex:Hello>

Nós podemos modificar o arquivo de classe manipulador de tag, como segue:

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());
    }

}

Em seguida é preciso modificar o arquivo TLD da seguinte forma:

<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>

Agora, podemos utilizar a etiqueta modificado na JSP, como segue:

<%@ 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>

A saída do programa acima é como segue:

This is message body

os atributos de marca personalizada

Você pode definir critérios personalizados em várias propriedades, para receber a propriedade, o valor da classe tag personalizado deve implementar o método setter, os métodos JavaBean setter são os seguintes:

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());
       }
   }

}

Nome da propriedade é "mensagem", de modo que o setter é a setMessage (). Agora vamos usar o arquivo TLD <atributo> elemento para adicionar essa propriedade:

<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>

Agora podemos usar as propriedades da mensagem no arquivo JSP, como mostrado abaixo:

<%@ 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>

Exemplos dos dados acima saída é:

This is custom tag

Você também pode incluir as seguintes propriedades:

propriedade descrição
nome Definir o nome da propriedade. Cada tag é o nome do atributo deve ser exclusivo.
necessário Especifica se o atributo é obrigatório ou opcional, se definido como falso opcional.
rtexprvalue Quando você executa a expressão comunicado, os atributos de marca são válidos.
tipo Definir o tipo de classe Java da propriedade. O padrão é especificado comocadeia
descrição descrição
fragmento Se você declarar a propriedade, o valor da propriedade será tratado como umJspFragment.

Estes são os atributos associados com a instância especificada:

.....
    <attribute>
      <name>attribute_name</name>
      <required>false</required>
      <type>java.util.Date</type>
      <fragment>false</fragment>
    </attribute>
.....

Se você usar duas propriedades, modificar o arquivo TLD da seguinte forma:

.....
    <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>
.....