`

自定义标签——实现控制页面显示记录数

阅读更多
1.创建标签的处理类ShowSizeTag类文件:

import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;

public class ShowSizeTag extends TagSupport {
	// 记录总数
	public int count;
	// 当前设置的页面显示记录数
	public int delta;

	public int getCount() {
		return count;
	}

	public ShowSizeTag() {
	}

	public void setCount(int count) {
		this.count = count;
	}

	public int getDelta() {
		return delta;
	}

	public void setDelta(int delta) {
		this.delta = delta;
	}

	public int doEndTag() throws JspException {
		// StringBuffer中保存待输出的HTML代码
		StringBuffer sb = new StringBuffer();
		sb.append("<b>共");
		sb.append(count);
		sb.append("条记录");
		sb.append(" 每页显示 ");
		// 创建select box
		sb.append("<select name='showSize' id='showSize' onchange='saveSize()'></select></b>");
		// 执行initShowSize函数
		sb.append("<script>initShowSize(document.getElementById('showSize'),");
		sb.append(delta);
		sb.append(");</script>");
		try {
			// 向页面输出内容
			pageContext.getOut().write(sb.toString());
		} catch (IOException e) {
			e.printStackTrace();
		}
		// 表示按照正常的流程继续执行JSP网页
		return EVAL_PAGE;
	}

	// 通常在 doStartTag 里进行逻辑操作,在 doEndTag 里控制输出。
	public int doStartTag() throws JspException {
		StringBuffer sb = new StringBuffer();
		try {
			// 向页面输出内容
			pageContext.getOut().write(writeJs(sb));
		} catch (IOException e) {
			e.printStackTrace();
		}
		// 表示标签体的内容被忽略
		return SKIP_BODY;
	}

	/**
	 * 输出HTML内容,js函数用于初始化 select box 的option,内容是分页记录数
	 * 
	 * @author fanyong
	 * 
	 * @param sb
	 *            StringBuffer.
	 * 
	 * @return 显示记录数.
	 */
	private String writeJs(StringBuffer sb) {
		sb.append("<script>\n");
		// initShowSize函数参数:1.showSize:select box 对象 2.修改前的显示数
		sb.append("function initShowSize(showSize,nowValue){\n");
		// 下拉框中列表
		sb.append("var pageCounts=\"10,30,50,100\";\n");
		sb.append("var pageCountsList=pageCounts.split(',');\n");
		sb.append("for(var i=0;i<pageCountsList.length;i++){\n");
		// 创建一个新的option:new Option('new text','new value');
		sb.append("var option=new Option(pageCountsList[i],pageCountsList[i]);\n");
		// option的序号。第一个选项对象是options[0],第二个是options[1],以此类推
		// select box 对象增加新option
		sb.append("showSize.options[showSize.options.length]=option;\n");
		// 下拉框显示定格在当前所选值
		sb.append("if(pageCountsList[i]==nowValue){\n");
		sb.append("option.selected=true;\n");
		sb.append("}}}\n");
		sb.append("</script>\n");
		return sb.toString();
	}
}


2.创建标签库描述文件showsize.tld文件
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
   <tlib-version>1.0</tlib-version>
   <jsp-version>1.2</jsp-version>
   <short-name>showSizeTag</short-name>
   <tag>
       <name>showSize</name>
       <tag-class>com.pccw.portlet.tag.ShowSizeTag</tag-class>
       <body-content>empty</body-content>
	   <attribute>
		   <name>count</name>
		   <required>true</required>
		   <rtexprvalue>true</rtexprvalue>
	  </attribute>
	  
	  <attribute>
		   <name>delta</name>
		   <required>true</required>
		   <rtexprvalue>true</rtexprvalue>
	  </attribute>
   </tag>
</taglib>


3.在web.xml文件中配置元素
<?xml version="1.0"?>

<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">
	... ... ... ... ...
	<jsp-config>
		<taglib>
	        <taglib-uri>/showSize</taglib-uri>
	        <taglib-location>/WEB-INF/showsize.tld</taglib-location>
		</taglib>
	</jsp-config>
</web-app>


4.在JSP文件中引人标签库
<%@ taglib uri="/showSize" prefix="pccw" %>


标签使用方法:

1.导入工具类
<%@page import="com.pccw.portlet.util.ShowSizeUtil" %>


ShowSizeUtil类文件:

import javax.portlet.PortletSession;
import javax.portlet.RenderRequest;

public class ShowSizeUtil {
	/**
	 * 得到用户定制的页面显示记录数
	 * 
	 * @author fanyong
	 * 
	 * @param ps
	 *            PortletSession.
	 * @param renderRequest
	 *            RenderRequest.
	 * 
	 * @return 显示记录数.
	 */
	public static int getSize(PortletSession ps, RenderRequest renderRequest) {
		// PortletSession中得到showSize属性值
		int showSize = ps.getAttribute("showSize") == null ? 0 : (Integer) ps
				.getAttribute("showSize");
		int showSizeTemp = 10;
		if (renderRequest.getParameter("showSize") != null
				&& ps.getAttribute("showSize") != null) {
			showSizeTemp = Integer.parseInt(renderRequest
					.getParameter("showSize"));
		}
		// 首次显示页面PortletSession中没有保存showSize属性,也没有提交showSize参数
		// 页面打开后首次修改显示记录数,提交showSize参数,PortletSession中没有保存showSize属性
		if (renderRequest.getParameter("showSize") != null) {
			// 得到提交的showSize参数
			showSizeTemp = Integer.parseInt(renderRequest
					.getParameter("showSize"));
			// 如果用户当前定制的显示数和PortletSession中保存的showSize属性值不一致,说明用户修改了之前的定制数
			if (showSizeTemp != showSize) {
				ps.setAttribute("showSize", showSizeTemp);
			}
		}
		// 首次显示页面PortletSession中没有保存showSize属性,默认显示记录数量是10条
		return ps.getAttribute("showSize") == null ? 10 : (Integer) ps
				.getAttribute("showSize");
	}
}


2.导入标签
	<%@ taglib uri="/showSize" prefix="pccw" %>

3.最上面加入Session
PortletSession pss=renderRequest.getPortletSession(false);

4.
int delta = ShowSizeUtil.getSize(pss,renderRequest);


5.加入JavaScript方法(实例中使用StrutsPortlet,所以提交参数struts_action)

	function saveSize(){
		<portlet:namespace/>fm1.method="POST"; 
		<portlet:namespace/>fm1.action='<portlet:actionURL windowState="<%= WindowState.MAXIMIZED.toString() %>">
		<portlet:param name="struts_action" value="/ext/processManager/view"/>
		</portlet:actionURL>';
		<portlet:namespace/>fm1.submit();
	}

如果使用JSPPortlet,提交参数:
<portlet:param name="jsp_page" value="/portlet/ext/workbench/workbench.jsp"/> 
<portlet:param name="tab1" value="QueryAllProcess"/>


6.加入提交Form
<form action="" name="<portlet:namespace />fm1">
	<table width="100%">
		<tr>
			<td align="left"><b></b></td>
         	<!-- 自定义标签需要两个属性count,delta -->
			<td align="right"><pccw:showSize count="<%=tempList.size()%>" delta="<%=delta%>" /></td>
		</tr>
   </table>
</form>


说明:
A count 表示一共有多少条数据
B delta 分页与分页的标签对应
分享到:
评论

相关推荐

    Struts+Hibernate+自定义标签的网上书店

    本网上书店系统是一个基于MVC(Model-View-Controller)设计模式的Web应用程序,它整合了Java的两大核心框架——Struts和Hibernate,以及自定义标签技术,旨在提供一个高效、安全的图书浏览与购买平台。 **1. ...

    自定义分页标签

    本文档将详细介绍一个使用Java Server Pages (JSP)技术实现的自定义分页标签——`PagerTag`。该标签允许开发者在不编写冗余代码的情况下轻松地在JSP页面中实现分页功能。 #### 二、标签简介 `PagerTag`是一个自定义...

    小程序——自定义组件.rar

    `index.wxml`中,你需要编写组件的结构,可以使用`&lt;slot&gt;`标签来实现内容插槽,允许父组件向自定义组件传递内容。通过`wx:if`、`wx:else`、`wx:for`等指令,可以实现条件渲染和循环渲染。 `index.wxss`中,你可以为...

    java分页——taglib

    总结来说,`java分页——taglib`是利用自定义标签库来简化Java Web应用中分页功能的实现。通过`pagerdemo`,开发者可以方便地在JSP页面中插入分页组件,并在后端处理分页逻辑,从而提高代码的复用性和可维护性。这个...

    jsp分页

    根据提供的压缩包文件名“jsp自定义标签——分页标签 - Free Coding - ITeye技术网站_files”,我们可以推断内容可能涉及自定义JSP分页标签的实现。通常,自定义标签的流程如下: 1. **创建Tag类**:继承`javax....

    内销自定义界面查询功能设计.docx

    为了实现自定义查询界面的功能,本方案设计了四个核心表来管理查询界面的配置信息: 1. **Table1: FormConfigSettings** —— 界面基础配置表; 2. **Table2: FormChildrenConfigSettings** —— 查询条件详细配置...

    Google Android SDK开发范例大全(PDF高清完整版3)(4-3)

    3.1 更改与显示文字标签——TextView标签的使用 3.2 更改手机窗口画面底色——drawable定义颜色常数的方法 3.3 更改TextView文字颜色——引用Drawable颜色常数及背景色 3.4 置换TextView文字——CharSequence数据...

    Google Android SDK开发范例大全(PDF完整版4)(4-4)

    3.1 更改与显示文字标签——TextView标签的使用 3.2 更改手机窗口画面底色——drawable定义颜色常数的方法 3.3 更改TextView文字颜色——引用Drawable颜色常数及背景色 3.4 置换TextView文字——CharSequence数据...

    struts2——docs部分

    拦截器是Struts2的一大特色,它们在Action调用前后执行,可以实现日志记录、权限检查、事务管理等通用功能,极大地提高了代码复用性和可维护性。 **5. OGNL(Object-Graph Navigation Language)** OGNL是Struts2中...

    Google Android SDK开发范例大全(PDF高清完整版1)(4-1)

    3.1 更改与显示文字标签——TextView标签的使用 3.2 更改手机窗口画面底色——drawable定义颜色常数的方法 3.3 更改TextView文字颜色——引用Drawable颜色常数及背景色 3.4 置换TextView文字——CharSequence数据...

    jsp毕业设计——jsp高校学生考勤管理系统设计与实现(源代码+论文).zip

    JSP页面通常包含HTML标记和嵌入式的Java脚本元素,如JSP指令、脚本let、表达式、声明、以及自定义标签等。 系统的核心功能包括: 1. **用户管理**:管理员可以添加、删除和修改用户信息,分配权限,确保数据安全和...

    基于vue多tab页实现

    本教程将详细讲解如何使用Vue.js来创建一个简单的多标签页系统,并提供了一个实际项目模板——`vue-mutitab-master`作为参考。 首先,Vue.js是一个轻量级的前端JavaScript框架,以其组件化、声明式编程和响应式数据...

    Jsp程序设计——交友网站

    JSP的核心概念包括:脚本元素、指令元素、动作元素以及自定义标签。在这个交友网站中,JSP用于处理用户请求,生成动态响应,如用户登录、注册、查看个人信息等。 ### 2. MVC设计模式 为了实现清晰的代码结构和良好...

    jsp毕业设计——基于JSP的网上购物系统的设计与实现(源代码+论文).zip

    6. JSP自定义标签:JSP自定义标签允许开发者创建可重用的UI组件,提高代码的可读性和可维护性。TLD(Tag Library Descriptor)文件用于定义自定义标签的属性和行为。 7. CSS和JavaScript:前端界面的美化和交互通常...

    Google Android SDK开发范例大全的目录

    3.1 更改与显示文字标签——TextView标签的使用 3.2 更改手机窗口画面底色——drawable定义颜色常数的方法 3.3 更改TextView文字颜色——引用Drawable颜色常数及背景色 3.4 置换TextView文字——CharSequence数据...

    Google+Android+SDK开发范例大全

    ) 2.3 Android应用程序架构——从此开始 2.4 可视化的界面开发工具 2.5 部署应用程序到Android手机 第3章 用户人机界面 3.1 更改与显示文字标签——TextView标签的使用 3.2 更改手机窗口画面底色——drawable定义...

    Google Android SDK开发范例大全(完整版附部分源码).pdf

    3.1 更改与显示文字标签——TextView标签的使用 3.2 更改手机窗口画面底色——drawable定义颜色常数的方法 3.3 更改TextView文字颜色——引用Drawable颜色常数及背景色 3.4 置换TextView文字——CharSequence数据...

    Google Android sdk 开发范例大全 部分章节代码

    3.1 更改与显示文字标签——TextView标签的使用 3.2 更改手机窗口画面底色——drawable定义颜色常数的方法 3.3 更改TextView文字颜色——引用Drawable颜色常数及背景色 3.4 置换TextView文字——CharSequence数据...

Global site tag (gtag.js) - Google Analytics