使用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>
           
            ${article_info.id }---- ${article_info.title }<br>

</myTag:articleListTag>
<hr>

<myTag:articleListTag  cateid="2">
 
    <%=article_info.getId() %>------
            <%=article_info.getTitle() %> <br>
           
            ${article_info.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显示:

       ${article_info.id }---- ${article_info.title }

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
最新消息,CMS4J 现已推出 基于java / jsp技术开发的网站管理系统 CMS4J 2008 免费版 ,并且又推出了一套同样基于java / jsp技术开发的博客系统! CMS4J 2008 革新了原有的系统架构,开发了更为专业、便捷的后台管理界面,同时,还支持了网站集群的架构以及多数据的支持,功能体系也十分完整,属于java / jsp领域内比较优秀的CMS! 一、CMS4J 2008 系统介绍 CMS4J 是 JAVA / JSP 版网站管理系统(Content Manage System For Java)的简称,读作 “CMS For J”; 国内 JAVA版网站管理系统 的领航者,依托于 JAVA 技术,专注于网站内容管理; CMS4J绝非国外一些开源产品的改造版,我们秉承用户本土化的原则,切身体验国内CMS系统的应用现状与实际需求,为小企业量身定做,CMS4J项目在立项时,就已经立下了以下四大目标:   [目标 1]: 不编程,做动态网站 要让网站设计师、美工也会做动态网站,动态网站不再是程序员的专长;   [目标 2]: 高扩展,插件式架构 系统基于Plug-in结构,所有模块均插件化, 良好的二次开发接口;   [目标 3]: 小投资,低成本运营 让网站可以低成本运营,绝对不允许存在第三方不必要的软件开支;   [目标 4]: 大应用,分布式部署 立足日访量为1至100百万网站的应用,向千万级大型综合门户应用迈进; 二、特 性 ************************************************************** * 基于JAVA(JSP)技术 ************************************************************** 有人做过试验,对这三种语言分别做循环性能测试及存取Oracle数据测试。 在循环性能测试JSP只用了令人吃惊的四秒钟就结束了20000*20000的循环。而ASP、PHP测试的是2000*2000循环(少一个数量级),却分别用了63秒和84秒。(参考PHPLIB)。 数据测试,三者分别对 Oracle 8 进行 1000 次 Insert,Update,Select和Delete: JSP 需要 13 秒,PHP 需要 69 秒,ASP则需要 73 秒。 ************************************************************** * 无需编程 ************************************************************** 在现有先进的MVC思想上,进行了网站应用贴身分析,并对MVC三层的V层(View层,即展现层)进行了增强设计; 采用了JAVA所特有的Taglib技术,完美的实现了“无需编程”这一设想。 基于Dreamweaver的CMS4J网站开发插件,使CMS4J实现可视化架站。 [实例对比 CMS4J的代码 与 传统语言代码] http://www.cms4j.com/blueprint/index.html#VS ************************************************************** * 反应迅速 ************************************************************** 自动生成静态页(HTML,SHTML) 支持动态访问(.jsp)与静态访问(.shtml)两种访问模式,动静结合,收缩自如 三个层次的缓存(Cache): 静态页面缓存、内存镜像缓存、数据连接缓存 ************************************************************** * 插件式的二次开发 ************************************************************** cms4j功能模块化,支持管理插件(Plug-in)“热插拨” 网站二次开发更简易 ************************************************************** * 开发效率高 ************************************************************** “元件”式开发思想,使得种种需要重复利用的代码块“元件”化,彻底的实现代码的复用 我们承诺,使用CMS4J可以使您的动态网站开发效率 至少提高50 % ! ************************************************************** * 高可配置性、插件式的二次开发 ************************************************************** 无须重新编译CMS4J整体应用程序即可新增功能,实现个性化需求; 无须CMS4J其它任何模块的源代码即可新增功能,代码依赖性小,松耦合; 在现有构件基础之上,可以重整应用规则,从而应变商务规则的频繁变更; 二次开发可独立,不受限于现有系统结构,扩展性高。 ************************************************************** * 安装简易 ************************************************************** 从系统的安装到最终的配置,CMS4J提供了全程可视化配置服务 无论您是试用还是正式用户,我们均提供相应的技术支持。 ************************************************************** * 分布式应用 ************************************************************** 可以做到在一个信息体下,“管理”与“发布”的独立。 可将系统服务层、控制层、数据层三个层次部署在不同的位置上 ************************************************************** * 更多 敬请访问http://www.cms4j.com ************************************************************** CMS4J还有更多特性提供给您,如自定义Cache、单点登录(SSO)实现、网站多模板管理等等 ************************************************************** * CMS4J 版权所有 2004-2008 * Http://www.cms4j.com **************************************************************
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值