`
buzhucele
  • 浏览: 331911 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

基于XML的struts2分页组件

阅读更多
基于XML的struts2分页组件:
1、自定义JSP标签
import java.io.File;
import java.io.IOException;
import java.net.URL;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

import com.sitech.res.util.LogHelper;

public class PageTag extends TagSupport
{
    private static final long serialVersionUID = 8417047654596701521L;

    private String pageInfoUrl;

    private String hiddenProperty;

    // single,multiple
    private String selectMode = "single";

    private String target = "pageResult";

    public void setTarget(String target)
    {
        this.target = target;
    }

    public void setPageInfoUrl(String pageInfoUrl)
    {
        this.pageInfoUrl = pageInfoUrl;
    }

    public String getHiddenProperty()
    {
        return hiddenProperty;
    }

    public void setHiddenProperty(String hiddenProperty)
    {
        this.hiddenProperty = hiddenProperty;
    }

    public String getSelectMode()
    {
        return selectMode;
    }

    public void setSelectMode(String selectMode)
    {
        this.selectMode = selectMode;
    }

    public int doStartTag() throws JspException
    {
        StringBuffer str = new StringBuffer("<div id='").append(target).append(
                "'><div class='sortlist'>");
        try
        {
            str.append("<div class='tableheadbg'>查询结果列表<span class='darkblue'></span></div>");
            str.append("<table width='100%' border='0' cellpadding='0' cellspacing='0'>");
            int titleLength = 0;
            StringBuffer readMethodS = new StringBuffer("");
            StringBuffer tableHeadS = new StringBuffer("");
            String pageDataType = null;
            str.append("<thead><tr class='columnheading'>");
            try
            {
                DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
                DocumentBuilder db = dbf.newDocumentBuilder();

                ClassLoader loader = this.getClass().getClassLoader();
                URL url = loader.getResource(pageInfoUrl);
                File file = new File(url.getPath());

                Document doc = db.parse(file);
                Element root = doc.getDocumentElement();

                pageDataType = root.getAttribute("pageDataType");

                NodeList nl = root.getElementsByTagName("attribute");
                titleLength = nl.getLength();
                Element element = null;
                String[] hidPros = null;
                int hidProsLen = 0;
                if (hiddenProperty != null)
                {
                    hidPros = hiddenProperty.split(",");
                    hidProsLen = hidPros.length;
                }
                String tableHead = null;
                outter: for (int i = 0; i < titleLength; i++)
                {
                    element = (Element) nl.item(i);
                    String readMethod = element.getAttribute("readMethod");
                    String hid = "";
                    for (int j = 0; j < hidProsLen; j++)
                    {
                        hid = hidPros[j];
                        if (hid.equals(readMethod))
                        {
                            continue outter;
                        }
                    }
                    tableHead = element.getAttribute("displayName");
                    readMethodS.append(readMethod);
                    tableHeadS.append(tableHead);
                    if (i != titleLength - 1)
                    {
                        readMethodS.append(",");
                        tableHeadS.append(",");
                    }
                    str.append("<th class='tabletd header'>").append(tableHead).append("</th>");
                }
            }
            catch (Exception e)
            {
                LogHelper.logExceptionStackTrace(e);
            }
            str
                    .append(
                            "</tr></thead><tbody><tr class='tablewhitebg'><td class='tabletd' colspan='")
                    .append(titleLength)
                    .append("'><div align='center'><b>没有记录</b></div></td></tr>");
            str
                    .append(
                            "</tbody></table></div></div><input type='hidden' name='readMethodS' id='readMethodS' value='")
                    .append(readMethodS).append("'/>").append(
                            "<input type='hidden' name='tableHeadS' id='tableHeadS' value='")
                    .append(tableHeadS).append("'/>").append(
                            "<input type='hidden' name='pageDataType' id='pageDataType' value='")
                    .append(pageDataType).append("'/>").append(
                            "<input type='hidden' name='selectMode' id='selectMode' value='")
                    .append(selectMode).append("'/>");
            ;
            this.pageContext.getOut().write(str.toString());
        }
        catch (IOException e)
        {
            throw new JspException("分页标签开始异常", e);
        }
        return EVAL_BODY_INCLUDE;
    }

    public int doEndTag() throws JspException
    {
        StringBuffer str = new StringBuffer("");
        try
        {
            str
                    .append(
                            "<table width='100%' class='footer_table'><tr><td class='footer' align='right'>共<label id='rowCountText'></label>&nbsp;条记录|&nbsp;&nbsp;")
                    .append("<input type='hidden' id='rowCount'/>")
                    .append("每页&nbsp;")
                    .append(
                            "<select id='pageSize' name='page.pageSize'><option value='10'>&nbsp;10</option><option value='20'>&nbsp;20</option><option value='50'>&nbsp;50</option><option value='100'>100</option><option value='200'>200</option></select>")
                    .append("&nbsp;条记录|&nbsp;&nbsp;")

                    .append("共<label id='pageSumText'></label>&nbsp;页|&nbsp;&nbsp;")
                    .append("<input type='hidden' id='pageSum'/>")
                    .append("<input type='hidden' name='pageInfoUrl' id='pageInfoUrl' value='")
                    .append(pageInfoUrl)
                    .append("'/>")
                    .append(
                            "<input type='hidden' name='hiddenProperty' id='hiddenProperty' value='")
                    .append(hiddenProperty)
                    .append("'/>")
                    .append(
                            "<input type='submit' value='首页' onclick='pageBegin()'  class='buttonStyle2'/>")
                    .append(
                            "<input type='submit' value='上一页' onclick='pageBefore()' class='buttonStyle2'/>")
                    .append("第")
                    .append(
                            "<input type='text' name='page.pageNo' id='pageNo' value='1' size='3'/>")
                    .append("页")
                    .append(
                            "<input type='submit' value='下一页' onclick='pageNext()' class='buttonStyle2'/>")
                    .append(
                            "<input type='submit' value='末页' onclick='pageLast()' class='buttonStyle2'/>&nbsp;&nbsp;&nbsp;</div></td></tr></table>");
            this.pageContext.getOut().write(str.toString());
        }
        catch (IOException e)
        {
            throw new JspException("分页标签结束异常", e);
        }
        return (EVAL_PAGE);

    }

    public void release()
    {
    }
}

2、自定义标签配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!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>app</short-name>

	<tag>
		<name>pageTag</name>
		<tag-class>com.sitech.res.util.tag.PageTag</tag-class>
		<body-content>jsp</body-content>
		<attribute>
			<name>pageInfoUrl</name>
			<required>true</required>
		</attribute>
		<attribute>
			<name>selectMode</name>
			<required>false</required>
		</attribute>
		<attribute>
			<name>hiddenProperty</name>
			<required>false</required>
		</attribute>
		<attribute>
			<name>target</name>
			<required>false</required>
		</attribute>
	</tag>
</taglib>

修改web.xml
<jsp-config>
		<taglib>
			<taglib-uri>/si_page</taglib-uri>
			<taglib-location>/WEB-INF/tld/si_page.tld</taglib-location>
		</taglib>
	</jsp-config>

3、JSP查询页面
<p:pageTag pageInfoUrl="resource/config/page/s0230/VirtNet.xml"
		target="pageResult">

4、查询结果展示配置文件VirtNet.xml
<?xml version="1.0" encoding="UTF-8"?>
<beaninfo>
    <attribute readMethod="getVirtNetId" displayName="虚拟网编码" />

	<attribute readMethod="getVirtNetName" displayName="虚拟网名称" />

	<attribute readMethod="getVirtNet" displayName="虚拟网号码" />
	
	<attribute readMethod="getAreaId" displayName="服务区" />	
	
	<attribute readMethod="getNbrHeadId" displayName="局向" />
	
</beaninfo>

5、查询结果JSP页面
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<%@ taglib prefix="p" uri="/si_page"%>
<%@page import="java.util.List"%>
<%@page import="java.lang.reflect.Method"%>
<%@page import="com.sitech.res.util.page.Page"%>
<html>
<head>
<title>分页页面</title>
<link href="nresources/default/css/style.css" rel="stylesheet"
	type="text/css">
<link href="nresources/default/css/portalet.css" rel="stylesheet"
	type="text/css">
<script type="text/javascript" src="njs/jquery/jquery_tableSort.js"></script>
<script type="text/javascript" src="njs/jquery/listColor.js"></script>
<script type="text/javascript" src="njs/jquery/folding.js"></script>
</head>
<%
String[] methodName = (String[])request.getAttribute("methodName");
Page pageBean = (Page)request.getAttribute("page");
List<Object> resultList = ((Page)request.getAttribute("page")).getList();
%>
<body>
<div class="sortlist">
<div class="tableheadbg">查询结果列表<span class="darkblue"></span></div>
<table width="100%" border="0" cellpadding="0" cellspacing="0">
	<thead>
		<tr class="columnheading">
			<s:if test="#request.selectMode == 'single'">
				<th>选择</th>
			</s:if>
			<s:elseif test="#request.selectMode == 'multiple'">
				<th><input type="checkbox"
					id="selectAll" onclick="selectAllHandler(this,'selectRowId')" />全选</th>
			</s:elseif>
			<s:iterator value="#request.tableHead" var="tableHead">
				<th class="tabletd header"><s:property value="tableHead" /></th>
			</s:iterator>
		</tr>
	</thead>
	<tbody>
		<%
		if(resultList == null || resultList.size() <= 0 )
		{
		%>
		<tr class="tablewhitebg">
			<td class='tabletd' colspan='<%=methodName.length+1 %>'>
			<div align='center'><b>没有记录</b></div>
			</td>
		</tr>
		<%    
		}
		else
		{
	        Method method = null;
			for(Object object : resultList)
			{
			    String objectIdMethod = "get"+object.getClass().getSimpleName()+"Id";
			    Object objectId = object.getClass().getMethod(objectIdMethod).invoke(object);
			%>
		<tr class="tablewhitebg" onclick="trClickHandler(this)"
			ondblclick="trDoubleClickHandler(this)" id="<%=objectId %>">
			<s:if test="#request.selectMode == 'single'">
				<td class="tabletd"><input type="radio" name="selectRowId"
					value="<%=objectId %>" /></td>
			</s:if>
			<s:elseif test="#request.selectMode == 'multiple'">
				<td class="tabletd"><input type="checkbox" name="selectRowId"
					value="<%=objectId %>" /></td>
			</s:elseif>
			<%
				    for(String getMethodName : methodName)
				    {
				        method = object.getClass().getMethod(getMethodName);	
				        Object res = method.invoke(object);
				        if(res == null)
				        {
				            res = "";
				        }
					    out.println("<td class='tabletd'>"+res.toString()+"</td>");
					}
					%>
		</tr>
		<%
			}
		}		
		%>
	</tbody>
</table>
</div>
</body>
</html>
<%
String rowCount = (String)request.getAttribute("page.rowCount");
String pageSum = (String)request.getAttribute("page.pageSum");
%>
<script type="text/javascript">
<!--
$(document).ready(function() {
	$("#rowCountText").text('<%=rowCount%>');	
	$("#pageSumText").text('<%=pageSum%>');
	document.getElementById('rowCount').value = "<s:property value='page.rowCount'/>";	
	document.getElementById('pageSum').value="<s:property value='page.pageSum'/>";	
	document.getElementById('pageSize').value = "<s:property value='page.pageSize'/>";	
	document.getElementById('pageNo').value="<s:property value='page.pageNo'/>";	
});
//-->
</script>

分页js文件page.js
function getSingleSelect()
{
	var temp = document.getElementsByName("selectRowId");
	for (var i = 0, length = temp.length; i < length; i++) 
	{   
	    if (temp[i].checked) 
	    {   
		    return temp[i].value;   
		}   
	}  

}

function getMultipleSelect()
{
	var temp = document.getElementsByName("selectRowId");
	var selectStr;
	for (var i = 0, length = temp.length; i < length; i++) 
	{   
	    if (temp[i].checked) 
	    {   
	    	if(selectStr==""||selectStr==null)
	    	{
	    		selectStr = temp[i].value;
	    	}
	    	else if(selectStr!="")
	    	{
	    		selectStr = temp[i].value+','+selectStr;
	    	}
		}   
	}
	return selectStr;   
}

function selectAllHandler(selectAll, checkBoxName)
{
	$("input[name='"+checkBoxName+"']").attr("checked", selectAll.checked);
}
function queryPage() 
{
	pageBegin();
}

function pageBegin() 
{
	document.getElementById('pageNo').value = 1;
	return false;
}

function pageBefore() 
{
	var pageNo = document.getElementById('pageNo').value;
	if (pageNo && parseInt(pageNo) > 1) 
	{
		document.getElementById('pageNo').value = parseInt(pageNo) - 1;
	}
	return false;
}

function pageNext() 
{
	var pageNo = document.getElementById('pageNo').value;
	var pageSum = document.getElementById('pageSum').value;
	if (pageNo && parseInt(pageNo) < pageSum) 
	{
		document.getElementById('pageNo').value = parseInt(pageNo) + 1;
	}
	return false;
}

function pageLast() 
{
	document.getElementById('pageNo').value = document
			.getElementById('pageSum').value;
	return false;
}

function trDoubleClickHandler(selectTr)
{	
	try 
	{
		if (typeof (eval(dbClickCallBackHandler)) == "function" && selectTr) 
		{
		    
			dbClickCallBackHandler(selectTr.id);
		}
	}
	catch (e) 
	{
	}
}

function trClickHandler(selectTr)
{
	var doc = $(selectTr).find("input[name='selectRowId']");
	if(doc)
	{
		doc.attr("checked", !doc.attr("checked"));
	}
}
分享到:
评论

相关推荐

    struts2组件化分页

    1. **Struts2分页组件**:Struts2分页组件通常由Action类、结果视图、拦截器和自定义标签组成。Action类中会包含处理分页请求的方法,如获取当前页码、每页显示条数、总记录数等。结果视图负责渲染分页界面,可能是...

    Struts2分页-自定义标签-类似百度分页

    Struts2是一个基于MVC(Model-View-Controller)架构的Java Web框架,它提供了强大的动作调度、结果映射、拦截器等功能,简化了Java Web应用的开发。在Struts2中,自定义标签可以用来扩展JSP页面的功能,使其能够更...

    freemarker_struts2分页

    FreeMarker是一个模板引擎,用于生成动态HTML、XML等文档,而Struts2则是一个基于MVC设计模式的Web应用框架。本篇文章将深入探讨如何在Struts2框架下结合FreeMarker实现分页功能,帮助开发者更高效地处理大数据量的...

    Struts2分页程序

    3. **分页处理**:通过Struts2的标签或自定义组件实现分页逻辑。 4. **显示数据**:在前端页面上展示数据,并提供导航控件让用户可以翻页。 ### 技术栈 - JDK版本:1.6 - 开发工具:MyEclipse 6.0 - 应用服务器:...

    Struts2+jdbc+mysq分页Demo

    3. **Struts2 Action**:在Struts2中,Action是处理用户请求的核心组件。我们需要创建一个Action类,其中包含执行分页查询的方法。这个方法会根据用户的请求参数(如当前页码)来构造并执行SQL,然后将查询结果封装...

    struts2 分页

    2. **分页组件**: 在这个项目中,可能会使用到第三方的分页库,如DisplayTag或PageHelper等,它们提供了方便的分页API和标签库。DisplayTag是一个强大的表格显示标签库,支持分页、排序等功能。PageHelper是...

    Struts2自定义分页标签

    对于源码分析,Struts2的核心组件`org.apache.struts2.views.jsp.ui.TagSupport`是所有自定义标签的基础。你可以继承它,添加处理分页逻辑的方法,如`doStartTag()`和`doEndTag()`。同时,需要关注`evalParams()`...

    extjs+struts2分页例子

    通过以上步骤,我们就实现了EXTJS与Struts2的集成,以及基于它们的数据分页功能。这个简单的例子展示了EXTJS如何利用Struts2来获取和展示分页数据,帮助开发者快速理解并应用到实际项目中。对于初学者来说,这是一个...

    struts分页,数据查询资料

    对于分页,Struts框架并没有内置的分页组件,但可以通过集成第三方库如DisplayTag或使用自定义标签来实现。DisplayTag是一个强大的表格和分页标签库,它提供了一系列预定义的标签,可以轻松地在JSP页面上实现分页和...

    struts1.2实现分页

    3. **分页样式**:根据设计需求,可以定制分页组件的样式,如Bootstrap的分页导航。 4. **搜索引擎友好**:提供URL参数来支持搜索引擎的爬虫,例如通过`page`参数传递当前页码。 总之,Struts1.2实现分页需要结合...

    iBatis分页(基于Struts2和Freemarker)

    本知识点将深入探讨如何在Struts2框架中结合iBatis实现基于Freemarker模板的分页功能。 首先,我们需要理解iBatis,它是一个轻量级的Java持久层框架,它提供了一个SQL映射框架,允许开发者将SQL语句与Java代码分离...

    struts2实现jsp分页功能带注释

    对于大型项目,还可以考虑使用成熟的分页组件,如DisplayTag或Smart-Pagination,它们提供了更丰富的功能和更好的可定制性。 学习并掌握Struts2的分页技术,不仅能提升你的开发效率,还能为用户提供更友好的浏览...

    Struts2.0+dwr的分页

    DWR允许我们在客户端使用JavaScript直接调用服务器端的Java方法,这意味着我们可以在不刷新整个页面的情况下更新分页组件。通过DWR,你可以创建一个JavaScript对象,该对象映射到服务器上的一个服务类,服务类负责...

    Struts2 DisplayTag 分页

    DisplayTag是一个功能强大的开源库,主要用于生成表格和提供分页功能,而Struts2则是一个MVC框架,用于处理用户请求和业务逻辑。将两者整合可以实现高效、美观的分页效果。 首先,我们需要了解Struts2的基本架构。...

    struts2结合easyui实现增删改分页排序

    通过上述步骤,我们已经成功实现了基于Struts2 和 EasyUI 的增删改查及分页排序功能。虽然过程中可能会遇到一些小问题,比如参数传递不正确、页面布局调整等,但只要保持耐心和细心,逐一排查问题所在,就能够顺利...

    struts写的分页

    例如,可以使用Spring Data JPA的Pageable接口,或者在Struts中引入第三方的分页组件,如DisplayTag或Paginator。重要的是理解分页的基本原理,并能够灵活地将其应用到不同的框架和环境中。在实际开发中,应关注用户...

    struts_分页显示数据

    2. **分页模型组件**:创建另一个JavaBean,例如`PageBean`,它的作用是存储关于分页的信息,如当前页、每页显示的记录数、总页数等。`PageBean`可以根据`Book`的ArrayList来计算这些信息。 3. **控制器组件**:...

    一个Struts实现分页,增删改查,Tiles,国际化的DEMO

    Struts是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,它由Apache软件基金会维护。这个DEMO项目展示了如何使用Struts来实现常见的Web应用功能,包括分页、增删改查操作、Tiles布局以及国际化支持。...

    mybatis分页(struts2+spring+mybatis)

    本项目“mybatis分页(struts2+spring+mybatis)”演示了如何在Java Web应用中实现基于MyBatis的分页功能,结合Struts2和Spring框架,提供了一个完整的解决方案。下面将详细解释这个项目涉及的知识点。 1. **...

    基于Struts2的BBS项目

    **基于Struts2的BBS项目** Struts2是一个强大的MVC(Model-View-Controller)框架,广泛应用于Java Web开发。在这个基于Struts2的BBS项目中,开发者利用了Struts2的核心优势,构建了一个功能完善的论坛系统。下面...

Global site tag (gtag.js) - Google Analytics