Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Итератор коллекции с использованием tld


Автор: compiler91 30.3.2009, 22:30
Здравствуйте..
Хочу оседлать tld,  но вот не задача, не работает один из примеров:(
Задача: пройтись итерацией по вектору, выводя каждый элемент.
Проблема в том, что не удается непосредственно вывести элемента (если выводить не элемент, а некий символ, то выведется ровно столько раз, сколько элементов в векторе).
Как я это делаю:
index.jsp 
Код

   <%@taglib prefix="in" uri="/WEB-INF/tld/in.tld" %>
   <% Vector vector = new Vector(); vector.add("one"); vector.add("two");%>
   <it:iterate2 collection="<%=vector%>">       
        Item : <%=item%> <br />
    </it:iterate2>

iterate.tld 
Код

    <tag>
        <name>iterate2</name>
        <tei-class>tld.IteratorTagInfo</tei-class>
        <tag-class>tld.IteratorTag</tag-class>
        <attribute>
            <name>collection</name>
            <required>true</required>
            <rtexprvalue>true</rtexprvalue>
        </attribute>
    </tag>

IteratorTag.java
Код

package tld;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTagSupport;
import java.io.IOException;
import java.util.*;

public class IteratorTag extends BodyTagSupport {
    private Collection collection;
    private Iterator iterator;

    public void setCollection(Collection collection){
        this.collection = collection;
    }
    public int doStartTag() throws JspException {
        return collection.size() > 0 ? EVAL_BODY_BUFFERED : SKIP_BODY;
    }
    public void doInitBody() throws JspException {
        iterator = collection.iterator();
        pageContext.setAttribute("item", iterator.next());
    }
    public int doAfterBody() throws JspException {
        if(iterator.hasNext()){
            pageContext.setAttribute("item", iterator.next());
            return EVAL_BODY_BUFFERED;
        } else {
            try {
                getBodyContent().writeOut(getPreviousOut());
            } catch(IOException e){
                throw new JspException(e.getMessage());
            }
            return SKIP_BODY;
        }
    }
}

IteratorTagInfo.java(помоему, он не используеться)
Код

package tld;

import javax.servlet.jsp.tagext.TagData;
import javax.servlet.jsp.tagext.*;

public class IteratorTagInfo extends TagExtraInfo {
    public VariableInfo [] getVaribleInfo(TagData data){
        return new VariableInfo[]{
                new VariableInfo(data.getId(), "Java.lang.Object", true, VariableInfo.NESTED)
        };
    }
}

Если использовать 
Код
<jsp:useBean id="item" scope="page" class="java.lang.String" />
, то все работает, но очень хочется обойтись без компонентов bean.

Помогите пожалуйста...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)