0

我必须计算页面的访问次数,但是当计数为奇数时,我不应该打印计数,我必须从自定义标签中执行此操作。我无法从自定义标签中调用我的字段计数..

这是我的代码:

索引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;
}

}

4

1 回答 1

0

请找到以下答案,该答案使用自定义标签打印奇数值。

1) 创建Tag handler类 创建Tag Handler,我们继承了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 文件 Tag Library Descriptor (TLD) 文件包含tag 和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 文件的完整路径。稍后我们将了解 uri。

它使用 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/>

在此处输入图像描述

于 2018-06-27T06:49:58.910 回答