【问题标题】:Get application field from JSP from Custom Tag通过自定义标签从 JSP 获取应用程序字段
【发布时间】:2018-12-05 02:27:13
【问题描述】:

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

这是我的代码:

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

}

【问题讨论】:

    标签: jsp servlets servletcontextlistener custom-tags application-scope


    【解决方案1】:

    请找到下面的答案,它使用自定义标签打印奇数。

    1) 创建标签处理程序类 要创建 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 文件 标记库描述符 (TLD) 文件包含标记和标记处理程序类的信息。它必须包含在 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/>
    

    【讨论】:

      猜你喜欢
      • 2021-02-27
      • 1970-01-01
      • 1970-01-01
      • 2014-11-16
      • 2021-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-11
      相关资源
      最近更新 更多