Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Custom tag. Итерационный+вложенный

14K
17 мая 2008 года
Irene_001
43 / / 29.07.2007
вопрос такой, имеется итерационный кастом тег, а в нём вложенный, но на каждой итерации этот тег читает вложенный снова, повторяя его... Таким образом у меня на странице например написано 10 одинаковых слов(т.к итераций 10)... можно ли от этого ка-нибудь избавиться? и если да, подскажите пожалуйста как?
63
17 мая 2008 года
Zorkus
2.6K / / 04.11.2006
Цитата: Irene_001
вопрос такой, имеется итерационный кастом тег, а в нём вложенный, но на каждой итерации этот тег читает вложенный снова, повторяя его... Таким образом у меня на странице например написано 10 одинаковых слов(т.к итераций 10)... можно ли от этого ка-нибудь избавиться? и если да, подскажите пожалуйста как?


А дать код нам сюда - никак? Военная тайна? Правила постинга в раздел читаем, ага.

14K
17 мая 2008 года
Irene_001
43 / / 29.07.2007
только начала разбираться, не судите пожалуйста строго....
Пыталась сделать следующее: выпадающий список, опции которого можно устанавливать как при помощи коллекции так и вручнцю... выкладываю весь код...

Основной тег:
Код:
public class MyFirstTag extends TagSupport
{
      private Iterator iterator;
      private ArrayList<String> _collection = new ArrayList<String>();
      private String id;
      private String newEl ;  
     
     
      public int doStartTag() throws JspTagException
      {
          try
          {
              JspWriter out = pageContext.getOut();

              if (_collection == null)
              {
                  out.print("empty collection");
                  throw new JspTagException("No collection with name "  + _collection + " found");
              }
             
              iterator = _collection.iterator();
             
              out.print("<SELECT name=\"myListik\" &#111;&#110;change=\"tar1.value = myListik.value\">");
             
              if (iterator.hasNext())
              {
                  pageContext.setAttribute("item", iterator.next());
                  out.print("<OPTION value = "+(String)pageContext.getAttribute("item")+ ">"+
                          (String)pageContext.getAttribute("item"));                 
                                 
                  return EVAL_BODY_INCLUDE;
              }
              else
              {
                  out.print("</SELECT>");
                  out.print("<input TYPE=TEXT NAME=\"tar1\" value=\"From my tag!(from else)\">");
                   
                  return SKIP_BODY;
              }
           
          }
          catch(Exception e)
          {
              return SKIP_BODY;
          }
      }

      public int doAfterBody()
      {
          try
          {
                JspWriter out = pageContext.getOut();

                if (iterator.hasNext())
                {    
                    //out.print(iterator.next());
                    pageContext.setAttribute("item", iterator.next());
                    out.print("<OPTION value ="+(String)pageContext.getAttribute("item")+ ">"+
                            (String)pageContext.getAttribute("item"));               
                   
                    return EVAL_BODY_AGAIN;
                }
                else
                {
                    out.print("</SELECT>");
                    out.print("<input TYPE=TEXT NAME=\"tar1\" value=\"From my tag!\">");
                   
                    return SKIP_BODY;
                }
          }
          catch (Exception e)
          {
              return SKIP_BODY;
          }
      }

     
      public void setCollection(ArrayList<String> collection)
      {
            this._collection = collection;
      }      
     
      public void setId(String id)
      {
          this.id = id;
      }
     
      public String getId()
      {
          return id;
      }
       
}


Теперь сам вложенный тег:
Код:
public class ParameterTag extends BodyTagSupport {

    public int doStartTag() throws JspException
       {
           
        MyFirstTag parentTag =(MyFirstTag)findAncestorWithClass(this, MyFirstTag.class);

          if (parentTag == null)
          {
             throw new JspException("Tag should be nested in \"primenumtag\" Tag");
          }

          return EVAL_BODY_TAG;
       }

       public int doEndTag() throws JspException
       {
          String prime =(String)pageContext.getAttribute("value");
          String s = bodyContent.getString();
           
         
          try
          {
              bodyContent.clearBody();
               
              bodyContent.println("<option>"+s+"<br/>");
              pageContext.setAttribute("item",s);
             bodyContent.writeOut(bodyContent.getEnclosingWriter());
             
          }
          catch(IOException ioe)
          {
             throw new JspException(ioe.getMessage());
          }
         
          return  SKIP_BODY;  
       }

    }


и сама JSP страничка:
Цитата:
<HTML>
<HEAD>
<%@ taglib uri="mytaglib.tld" prefix="mytaglib" %>
<jsp:useBean id="rotator" class="packx.ReduktingTeg" />
</HEAD>

<BODY>
<% java.util.ArrayList al = new java.util.ArrayList();
al.add("One");
al.add("Two");
al.add("Three");
al.add("Four");
al.add("Five");
%>
Collection to Iterate over is <%=al%> ..... <p>

<B>Iterating ...</B><br>
<FORM name = "formname" TYPE=POST ACTION=fitrstJsp.jsp>
<mytaglib:first collection="<%= al%>" id = "1" >
<mytaglib:abcd>hello_1</mytaglib:abcd>
<mytaglib:abcd>world_2</mytaglib:abcd>
</mytaglib:first>
<INPUT TYPE=TEXT NAME="ADDRESS">
</form>

</p>
</BODY>
</HTML>

14K
18 мая 2008 года
Irene_001
43 / / 29.07.2007
Всё, спасибо, вопрос снимаю, разобралась :)
63
18 мая 2008 года
Zorkus
2.6K / / 04.11.2006
Цитата: Irene_001
Всё, спасибо, вопрос снимаю, разобралась :)


Покажешь тогда, в чем была ошибка? Наверняка, кому-то твой опыт пригодится.

14K
18 мая 2008 года
Irene_001
43 / / 29.07.2007
Цитата: Zorkus
Покажешь тогда, в чем была ошибка? Наверняка, кому-то твой опыт пригодится.



Я не уверена в правильности моего кода, но я добивалась чтоб он работал именно так как мне нужно было:
(P.S. код немного "сыроват")

Мой первый основной тег:

Код:
public class MyFirstTag extends TagSupport
{
      private Iterator iterator;
      private ArrayList<String> _collection = new ArrayList<String>();
      private String id;
     
      public int doStartTag() throws JspTagException
      {
          try
          {
              JspWriter out = pageContext.getOut();

              if (_collection == null)
              {
                  out.print("empty collection");
                  throw new JspTagException("No collection with name "  + _collection + " found");
              }
              out.print("<SELECT name=\"myListik\" &#111;&#110;change=\"ShowMyData.value = myListik.value\">");
                 
              iterator = _collection.iterator();
                                   
          }
          catch(Exception e)
          {
              return SKIP_BODY;
          }
          return EVAL_BODY_INCLUDE;
      }

      public int doAfterBody()
      {
          try
          {
                JspWriter out = pageContext.getOut();
                while (iterator.hasNext())
                  {
                      pageContext.setAttribute("item", iterator.next());
                      out.print("<OPTION value = "+(String)pageContext.getAttribute("item")+ ">"+
                              (String)pageContext.getAttribute("item"));                 
                  }  

                    out.print("</SELECT>");
                    out.print("<input TYPE=TEXT NAME=\"ShowMyData\" value=\"From my tag!\">");
                   
                    return SKIP_BODY;
          }
          catch (Exception e)
          {
              return SKIP_BODY;
          }
      }

     
      public void setCollection(ArrayList<String> collection)
      {
            this._collection = collection;
      }      
     
      public void setId(String id)
      {
          this.id = id;
      }
     
      public String getId()
      {
          return id;
      }
       
}


обработчик вложенного:

Код:
public class ParameterTag extends BodyTagSupport {
    MyFirstTag parentTag;

    public int doStartTag() throws JspException
       {
           
        parentTag =(MyFirstTag)findAncestorWithClass(this, MyFirstTag.class);

          if (parentTag == null)
          {
             throw new JspException("Tag should be nested in \"primenumtag\" Tag");
          }

          return EVAL_BODY_TAG;
       }

       public int doEndTag() throws JspException
       {
          String prime =(String)pageContext.getAttribute("value");
          String s = bodyContent.getString();
           
         
          try
          {
             bodyContent.clearBody();
               
              bodyContent.println("<option value = "+s + ">"+s+"<br/>");
              pageContext.setAttribute("item",s);
             bodyContent.writeOut(bodyContent.getEnclosingWriter());
             
          }
          catch(IOException ioe)
          {
             throw new JspException(ioe.getMessage());
          }
         
          return  SKIP_BODY;  
       }

    }


и сама JSP страничка
Код:
<HTML>
    <HEAD>
        <%@  taglib uri="mytaglib.tld" prefix="mytaglib" %>
        <jsp:useBean id="rotator" class="packx.ReduktingTeg"  />
    </HEAD>

    <BODY>
        <% java.util.ArrayList al = new java.util.ArrayList();
            al.add("One");
            al.add("Two");
            al.add("Three");
            al.add("Four");
            al.add("Five");
        %>
        Collection to Iterate over is <%=al%> ..... <p>

        <B>Iterating ...</B><br>
        <FORM  name = "formname" TYPE=POST ACTION=fitrstJsp.jsp>
            <mytaglib:first collection="<%= al%>" id = "1" >
                <mytaglib:abcd>hello_1</mytaglib:abcd>
                <mytaglib:abcd>world_2</mytaglib:abcd>
            </mytaglib:first>
            <INPUT TYPE=TEXT NAME="ADDRESS">
        </form>

        </p>
    </BODY>
</HTML>


(Правда не совсем итерационный тег вышел :) )
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог