2010-03-31 4 views
0

У меня есть таможенные тэги следующим образом. повторить и заголовок метки имеют doAfterBody метод implemented.Both из них расширяет BodyTagSupport классЗадача по внедрению специальных тегов

 <csajsp:repeat reps="5"> 
       <LI> 
        <csajsp:heading bgColor="BLACK"> 
         White on Black Heading 
        </csajsp:heading> 
       </LI> 
      </csajsp:repeat> 

Repeat тег класса

public void setReps(String repeats) { 
       System.out.println("TESTING"+repeats); 
         //sets the reps variable. 
    } 
    public int doAfterBody() { 
       System.out.println("Inside repeate tag"+reps); 
      if (reps-- >= 1) { 
       BodyContent body = getBodyContent(); 
       try { 
       JspWriter out = body.getEnclosingWriter(); 
       System.out.println("BODY"+body.getString()); 
       out.println(body.getString()); 
       body.clearBody(); // Clear for next evaluation 
       } catch(IOException ioe) { 
       System.out.println("Error in RepeatTag: " + ioe); 
       } 
       return(EVAL_BODY_TAG); 
      } else { 
       return(SKIP_BODY); 
      } 
      } 

Класс Heading тег

 public int doAfterBody() 
      { 
       System.out.println("inside heading tag"); 
       BodyContent body = getBodyContent(); 
       System.out.println(body.getString()); 
       try { 
        JspWriter out = body.getEnclosingWriter(); 
        out.print("NEW TEXT"); 
       } catch(IOException ioe) { 
        System.out.println("Error in FilterTag: " + ioe); 
       } 
       // SKIP_BODY means I'm done. If I wanted to evaluate 
       // and handle the body again, I'd return EVAL_BODY_TAG. 
       return(SKIP_BODY); 
      } 
      public int doEndTag() { 
       try { 
        JspWriter out = pageContext.getOut(); 
        out.print("NEW TEXT 2"); 
       } catch(IOException ioe) { 
        System.out.println("Error in HeadingTag: " + ioe); 
       } 
       return(EVAL_PAGE); // Continue with rest of JSP page 
       } 

Пользовательский тег Файл tld:

<taglib> 
    <tlibversion>1.0</tlibversion> 
    <jspversion>1.1</jspversion> 
    <shortname>csajsp</shortname> 
    <uri></uri> 
    <tag> 
    <name>heading</name> 
    <tagclass>com.test.tags.HeadingTag</tagclass> 
    <bodycontent>JSP</bodycontent> 
    <attribute> 
     <name>bgColor</name> 
     <required>true</required> <!-- bgColor is required --> 
    </attribute> 
    </tag> 
    <tag> 
    <name>repeat</name> 
    <tagclass>com.test.tags.RepeatTag</tagclass> 
    <info>Repeats body the specified number of times.</info> 
    <bodycontent>JSP</bodycontent> 
    <attribute> 
     <name>reps</name> 
     <required>true</required> 
     <rtexprvalue>true</rtexprvalue> 
    </attribute> 
    </tag> 
</taglib> 

Порядок, в котором печатаются СОП является

  1. метод сеттер из csajsp: повторение называется.
  2. Белый на черном Печатается. т.е. вызывается doAfterBody csajsp: заголовок заголовка.

Я не знаю, почему он не звонит doAfterBody из csajsp:repeat тег.

Пожалуйста, помогите мне разобраться в этом.

+0

Информация не достаточна. Нам нужны релевантные части файла TLD, и нам нужно знать, какой класс/интерфейс ваши теги расширяются. – skaffman

+0

Привет, я обновил поток с достаточной информацией. Не могли бы вы мне помочь? – Appps

ответ

0

В каком классе расширяются ваши теги?

Поведение TagSupport по умолчанию - это возврат SKIP_BODY, который пропускает обработку тела тега.

Поведение BodyTagSupport по умолчанию - это возврат EVAL_BODY_BUFFERED, который обрабатывал тело тега.

Если вы сами реализуете BodyTag, вам необходимо убедиться, что вы правильно переопределили doStartTag, указав, что тело JSP должно быть оценено.

Смежные вопросы