读书人

应用jsp自定义标签库实现数据列表显示

发布时间: 2013-03-10 09:38:39 作者: rapoo

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


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

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

cms4j中调用方式:

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

下面例子实现类似效果:

运行效果:

应用jsp自定义标签库实现数据列表显示模拟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 }

读书人网 >JavaScript

热点推荐