воскресенье, 19 июня 2011 г.

Динамические атрибуты тега

Теги могут работать и с динамическими атрибутами.
Пример JSP:
....
<h2>Invocation 1 (six attributes)</h2>
<ul>
    <my:echoAttributes x="1" y="2" z="3" r="red" g="green" b="blue"/>
</ul>
<h2>Invocation 2 (zero attributes)</h2>
<ul>
    <my:echoAttributes/>
</ul>
<h2>Invocation 3 (three attributes)</h2>
<ul>
    <my:echoAttributes dogName="Scruffy" 
                       catName="Fluffy" 
                       blowfishName="Puffy"/>
</ul>
....



А вот результат в браузере:
<h2>Invocation 1 (six attributes)</h2>
<ul>
    <li>x = 1</li>
    <li>y = 2</li>
    <li>z = 3</li>

    <li>r = red</li>
    <li>g = green</li>
    <li>b = blue</li>

</ul>
<h2>Invocation 2 (zero attributes)</h2>
<ul>

</ul>
<h2>Invocation 3 (three attributes)</h2>

<ul>
    <li>dogName = Scruffy</li>
    <li>catName = Fluffy</li>
    <li>blowfishName = Puffy</li>
</ul> 

Вот реализация нашего тега:
package jsp2.examples.simpletag;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.SimpleTagSupport;
import javax.servlet.jsp.tagext.DynamicAttributes;
import java.util.ArrayList;
import java.util.Iterator;
import java.io.IOException;

/**
 * SimpleTag handler that echoes all its attributes 
 */
public class EchoAttributesTag 
    extends SimpleTagSupport
    implements DynamicAttributes
{
    private ArrayList keys = new ArrayList();
    private ArrayList values = new ArrayList();

    public void doTag() throws JspException, IOException {
 JspWriter out = getJspContext().getOut();
 for( int i = 0; i < keys.size(); i++ ) {
     String key = (String)keys.get( i );
     Object value = values.get( i );
     out.println( "
  • " + key + " = " + value + "
  • " ); } } public void setDynamicAttribute( String uri, String localName, Object value ) throws JspException { keys.add( localName ); values.add( value ); } }
    Как видно из примера для работы с динамическими атрибутами, тегу нужно реализовать интерфейс javax.servlet.jsp.tagext.DynamicAttributes, он был добавлен в javax.servlet.jsp.tagext с приходом JSP 2.0

    Комментариев нет:

    Отправить комментарий