Получить поле приложения из JSP из Custom Tag

Я должен считать количество посещений страницы, но когда счет нечетный, я не должен печатать счетчик, и я должен сделать это из пользовательского тега. Я не могу назвать счетчик полей из пользовательского тега..

Это мой код:

индекс jsp файл

<%
    Integer count = (Integer)application.getAttribute("numberOfVisits");

    if (count == null || count == 0)
    {
        out.println("Welcome!");
        count = 1;
    }
    else
    {
        out.println("Welcome back");
        count++;
    }
    application.setAttribute("numberOfVisits", count);
%>
<%@ taglib uri="/WEB-INF/mytags.tld" prefix="c" %>
<c:counter></c:counter>
<%=count%>

класс пользовательских тегов:

public int doEndTag() throws JspException{

    try
    {
        int count = application.getAttribute("numberOfVisits") // wrong
        if (count % 2 != 0) return EVAL_PAGE;
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }      
    return SKIP_PAGE;
}

}

1 ответ

Пожалуйста, найдите ответ ниже, который печатает нечетное значение с помощью пользовательского тега.

1) Создание класса обработчика тега Чтобы создать обработчик тега, мы наследуем класс TagSupport и переопределяем его метод doStartTag(). Чтобы записать данные для jsp, нам нужно использовать класс JspWriter.

Класс PageContext предоставляет метод getOut(), который возвращает экземпляр класса JspWriter. Класс TagSupport предоставляет экземпляр pageContext по умолчанию.

package com.test;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.TagSupport;

public class CountTagHandler extends TagSupport{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    public int doStartTag() throws JspException {
        JspWriter out=pageContext.getOut();
        try{
            Integer attribute = (Integer)pageContext.getAttribute("numberOfVisits", PageContext.APPLICATION_SCOPE);

            //Print the value only if it is even
            if(attribute != null && attribute % 2 == 0) {
                out.print(attribute);
            }
        }catch(Exception e){System.out.println(e);}
        return SKIP_BODY;
    }

}

2) Создание файла TLD Файл дескриптора библиотеки тегов (TLD) содержит информацию о тегах и классах Tag Hander. Он должен находиться внутри каталога WEB-INF.

Файл: mytags.tld

<?xml version="1.0" encoding="ISO-8859-1" ?>  
<!DOCTYPE taglib  
        PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"  
    "http://java.sun.com/j2ee/dtd/web-jsptaglibrary_1_2.dtd">  

<taglib>  

  <tlib-version>1.0</tlib-version>  
  <jsp-version>1.2</jsp-version>  
  <short-name>simple</short-name>  
  <uri>http://tomcat.apache.org/example-taglib</uri>  

<tag>  
<name>count</name>  
<tag-class>com.test.CountTagHandler</tag-class>  
</tag>  
</taglib>  

3) Создайте файл JSP. Давайте использовать тег в нашем файле JSP. Здесь мы прямо указываем путь к файлу tld. Но рекомендуется использовать имя uri вместо полного пути файла tld. Мы узнаем об Ури позже.

Он использует директиву taglib для использования тегов, определенных в файле tld. Из jsp или из любого другого места в проекте установите "numberOfVisits". Например:JSP файл1:

<%! static int count = 0;  %>
<%
    application.setAttribute("numberOfVisits", count++);
%>
<a href="second.jsp">Custom link</a>

Это второй файл JSP:

<h3>Using tag</h3>
<%@ taglib uri="WEB-INF/mytags.tld" prefix="m" %>

Application count: <m:count/>

Другие вопросы по тегам