Получить поле приложения из JSP из Custom Tag - PullRequest
0 голосов
/ 26 июня 2018

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

Это мой код:

индекс 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 Ответ

0 голосов
/ 27 июня 2018

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

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 file1 :

<%! 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/>

enter image description here

...