使用jsp自定义标签库实现数据列表显示模拟cms4j中的标签库效果

简介:


文章标题: 使用jsp自定义标签库实现数据列表显示模拟cms4j中的标签库效果

 

作者: javaboy2012
Email:yanek@163.com
qq:    1046011462

 

 

cms4j中调用方式:

 

 

下面例子实现类似效果:

 

运行效果:

 

具体如下:


jsp调用代码:


<%@ page language="java" import="java.util.*,com.yanek.cms.vo.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/tags/my-cms" prefix="myTag" %>
<body>
<myTag:articleListTag  cateid="1">
 
    <%=article_info.getId() %>------
            <%=article_info.getTitle() %> <br>
           
            articleinfo.id{article_info.title }<br>

</myTag:articleListTag>
<hr>

<myTag:articleListTag  cateid="2">
 
    <%=article_info.getId() %>------
            <%=article_info.getTitle() %> <br>
           
            articleinfo.id{article_info.title }<br>

</myTag:articleListTag>
 </body>
</html>

 

标签库定义


<!-- articleListTag start -->

    <tag>

       <name>articleListTag</name>

       <tag-class>com.yanek.cms.tag.ArticleTag</tag-class>

   
       <body-content>jsp</body-content>
   
      <variable>
        <name-given>article_info</name-given>
        <!--<name-from-attribute>name</name-from-attribute>-->
        <variable-class>com.yanek.cms.tag.Article</variable-class>
        <declare>true</declare>
        <scope>NESTED</scope>
      </variable>

       <attribute>
        <name>cateid</name>
        <required>true</required>
       </attribute>
 
</tag>

<!-- articleListTag end -->

 


标签库类

package com.yanek.cms.tag;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTagSupport;

public class ArticleTag extends BodyTagSupport {

 private Iterator it;// 要迭代的对象
 private int cateid; // 文章类别id
 
 public final static String name = "article_info";

 @Override
 public int doEndTag() throws JspException {
  try {
   if (bodyContent != null) {
    bodyContent.writeOut(bodyContent.getEnclosingWriter());
   }
  } catch (IOException e) {
   e.printStackTrace();

  }
  return EVAL_PAGE;
 }

 @Override
 public int doStartTag() throws JspException {

  //这里根据文章分类,构造不同的列表数据,实际可以根据数据库获取
  List<Article> articles = new ArrayList<Article>();
  if (cateid == 1) {
   articles.add(new Article(1, "asp"));

   articles.add(new Article(2, "jsp"));
  } else {
   articles.add(new Article(3, "php"));

   articles.add(new Article(4, "java"));
  }
  it = articles.iterator();

  if (it == null) {
   return SKIP_BODY;

  } else {
   return continueNext();
  }
 }

 private int continueNext() {
  if (it.hasNext()) {
   pageContext.setAttribute(name, it.next(), pageContext.PAGE_SCOPE);
   return EVAL_BODY_TAG;
  } else {

   return SKIP_BODY;
  }
 }

 @Override
 public int doAfterBody() {
  return continueNext();
 }


 public int getCateid() {
  return cateid;
 }

 public void setCateid(int cateid) {
  this.cateid = cateid;
 }

}

 

标签库引用实体类

package com.yanek.cms.tag;

public class Article {
 
 private int id;
 private String title;
 public int getId() {
  return id;
 }
 public void setId(int id) {
  this.id = id;
 }
 public String getTitle() {
  return title;
 }
 public void setTitle(String title) {
  this.title = title;
 }
 public Article(int id, String title) {
  super();
  this.id = id;
  this.title = title;
 }
 
 public Article() {
  super();
  this.id = id;
  this.title = title;
 }
 
 
 

}

 

几点说明:标签调用是显示list中对象时采用的脚本变量名字article_info 是在标签库定义文件和标签库类中定义的,如下

    <variable>
        <name-given>article_info</name-given>
        <!--<name-from-attribute>name</name-from-attribute>-->
        <variable-class>com.yanek.cms.tag.Article</variable-class>
        <declare>true</declare>
        <scope>NESTED</scope>
      </variable>

标签库类中
public final static String name = "article_info";
pageContext.setAttribute(name, it.next(), pageContext.PAGE_SCOPE);

 

显示列表中对象的方式有2种方式:

调用类的方法:  在eclipse中可以方法提示。

        <%=article_info.getId() %>---- <%=article_info.getTitle() %>

jstl显示:

       articleinfo.id{article_info.title }

 

 

目录
打赏
0
0
0
0
27
分享
相关文章
|
10月前
|
JSP 教程 之 JSP 标准标签库(JSTL) 4
**JSP的JSTL是用于简化Web开发的标签库,包括核心、格式化、SQL、XML和函数5个部分。SQL标签库允许与数据库交互,如设定数据源、执行查询和更新,以及处理参数。例如, `&lt;sql:setDataSource&gt;` 定义数据源, `&lt;sql:query&gt;` 执行查询。通过使用JSTL,开发者能更整洁地处理JSP页面。**
78 8
|
8月前
|
使用IDEA+Maven搭建整合一个Struts2+Spring4+Hibernate4项目,混合使用传统Xml与@注解,返回JSP视图或JSON数据,快来给你的SSH老项目翻新一下吧
本文介绍了如何使用IntelliJ IDEA和Maven搭建一个整合了Struts2、Spring4、Hibernate4的J2EE项目,并配置了项目目录结构、web.xml、welcome.jsp以及多个JSP页面,用于刷新和学习传统的SSH框架。
280 0
使用IDEA+Maven搭建整合一个Struts2+Spring4+Hibernate4项目,混合使用传统Xml与@注解,返回JSP视图或JSON数据,快来给你的SSH老项目翻新一下吧
|
10月前
|
JSP 教程 之 JSP 标准标签库(JSTL) 6
**JSP JSTL 摘要:** JSTL是JSP的标签库,包含核心、格式化、SQL、XML和函数5类标签。它用于执行常见任务,如迭代、条件判断和XML操作。JSTL函数库提供字符串处理函数,如`contains()`, `endsWith()`, `escapeXml()`等,方便XML和HTML处理。通过`&lt;%@ taglib %&gt;`导入,如`fn:trim()`用于去除字符串两端空白。
64 5
|
10月前
|
JSP 教程 之 JSP 自定义标签 3
JSP自定义标签允许开发人员创建可重用的组件,简化页面逻辑。在JSP 2.0及以上版本,可通过继承`SimpleTagSupport`并覆写`doTag()`方法来创建自定义标签,如`HelloTag`,它有一个`message`属性。属性值通过setter方法`setMessage()`设置。在TLD文件中定义该属性后,可在JSP页面使用`&lt;ex:Hello message=&quot;This is custom tag&quot;/&gt;`来调用,输出定制的文本。
54 0
|
10月前
|
JSP 教程 之 JSP 自定义标签 4
**JSP自定义标签允许创建用户定义的语言元素。它们转换为Servlet中的tag handler,在执行时由Web容器调用。使用SimpleTagSupport继承并重写doTag()方法可创建简单标签。标签可设置属性,如message,通过setter方法访问。TLD文件定义属性元数据,JSP页面则通过prefix和uri引用。例如,&lt;ex:Hello message=&quot;...&quot;/&gt; 显示定制消息。属性可配置为必需、类型、描述及是否为JspFragment。**
47 0
JSP 教程 之 JSP 自定义标签 2
**JSP自定义标签允许用户创建个性化标签,简化页面逻辑。在JSP 2.0中,通过继承`SimpleTagSupport`并重写`doTag()`可创建简单标签处理器。示例展示了一个名为`Hello`的自定义标签,它接收并显示标签体内容。TLD文件配置了标签元数据,JSP页面引用该标签并展示“这是消息主体”。**
55 0
|
10月前
|
JSP 教程 之 JSP 自定义标签 1
**JSP自定义标签简介**:扩展JSP功能,创建用户定义标签,通过Servlet容器调用Tag Handler。在JSP 2.0中,使用SimpleTagHandlers简化定制。以&quot;Hello&quot;标签为例,创建`HelloTag`类继承`SimpleTagSupport`,重写`doTag()`打印消息。编译后,在`custom.tld`定义标签库,JSP页面引用后即可使用。例如 `&lt;ex:Hello/&gt;` 显示 &quot;Hello Custom Tag!&quot;。
48 0
|
6月前
|
【学习笔记】Jsp与Servlet技术
【学习笔记】Jsp与Servlet技术
139 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等