- 浏览: 331911 次
- 性别:
- 来自: 北京
最新评论
-
zskangs1126:
JAVA NIO 大文件读取 -
Imini123:
HttpClient通过HttpPost传递参数 -
l1334388165:
为什么用了第一种,死都没用呢?
HttpClient通过HttpPost传递参数 -
buzhucele:
lantian0802 写道有点不理解,锁锁住的是资源吗,像上 ...
读写锁的使用 -
lantian0802:
有点不理解,锁锁住的是资源吗,像上文中锁数加在shareDat ...
读写锁的使用
基于XML的struts2分页组件:
1、自定义JSP标签
2、自定义标签配置文件
修改web.xml
3、JSP查询页面
4、查询结果展示配置文件VirtNet.xml
5、查询结果JSP页面
分页js文件page.js
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> 条记录| ") .append("<input type='hidden' id='rowCount'/>") .append("每页 ") .append( "<select id='pageSize' name='page.pageSize'><option value='10'> 10</option><option value='20'> 20</option><option value='50'> 50</option><option value='100'>100</option><option value='200'>200</option></select>") .append(" 条记录| ") .append("共<label id='pageSumText'></label> 页| ") .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'/> </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")); } }
相关推荐
1. **Struts2分页组件**:Struts2分页组件通常由Action类、结果视图、拦截器和自定义标签组成。Action类中会包含处理分页请求的方法,如获取当前页码、每页显示条数、总记录数等。结果视图负责渲染分页界面,可能是...
Struts2是一个基于MVC(Model-View-Controller)架构的Java Web框架,它提供了强大的动作调度、结果映射、拦截器等功能,简化了Java Web应用的开发。在Struts2中,自定义标签可以用来扩展JSP页面的功能,使其能够更...
FreeMarker是一个模板引擎,用于生成动态HTML、XML等文档,而Struts2则是一个基于MVC设计模式的Web应用框架。本篇文章将深入探讨如何在Struts2框架下结合FreeMarker实现分页功能,帮助开发者更高效地处理大数据量的...
3. **分页处理**:通过Struts2的标签或自定义组件实现分页逻辑。 4. **显示数据**:在前端页面上展示数据,并提供导航控件让用户可以翻页。 ### 技术栈 - JDK版本:1.6 - 开发工具:MyEclipse 6.0 - 应用服务器:...
3. **Struts2 Action**:在Struts2中,Action是处理用户请求的核心组件。我们需要创建一个Action类,其中包含执行分页查询的方法。这个方法会根据用户的请求参数(如当前页码)来构造并执行SQL,然后将查询结果封装...
2. **分页组件**: 在这个项目中,可能会使用到第三方的分页库,如DisplayTag或PageHelper等,它们提供了方便的分页API和标签库。DisplayTag是一个强大的表格显示标签库,支持分页、排序等功能。PageHelper是...
对于源码分析,Struts2的核心组件`org.apache.struts2.views.jsp.ui.TagSupport`是所有自定义标签的基础。你可以继承它,添加处理分页逻辑的方法,如`doStartTag()`和`doEndTag()`。同时,需要关注`evalParams()`...
通过以上步骤,我们就实现了EXTJS与Struts2的集成,以及基于它们的数据分页功能。这个简单的例子展示了EXTJS如何利用Struts2来获取和展示分页数据,帮助开发者快速理解并应用到实际项目中。对于初学者来说,这是一个...
对于分页,Struts框架并没有内置的分页组件,但可以通过集成第三方库如DisplayTag或使用自定义标签来实现。DisplayTag是一个强大的表格和分页标签库,它提供了一系列预定义的标签,可以轻松地在JSP页面上实现分页和...
3. **分页样式**:根据设计需求,可以定制分页组件的样式,如Bootstrap的分页导航。 4. **搜索引擎友好**:提供URL参数来支持搜索引擎的爬虫,例如通过`page`参数传递当前页码。 总之,Struts1.2实现分页需要结合...
本知识点将深入探讨如何在Struts2框架中结合iBatis实现基于Freemarker模板的分页功能。 首先,我们需要理解iBatis,它是一个轻量级的Java持久层框架,它提供了一个SQL映射框架,允许开发者将SQL语句与Java代码分离...
对于大型项目,还可以考虑使用成熟的分页组件,如DisplayTag或Smart-Pagination,它们提供了更丰富的功能和更好的可定制性。 学习并掌握Struts2的分页技术,不仅能提升你的开发效率,还能为用户提供更友好的浏览...
DWR允许我们在客户端使用JavaScript直接调用服务器端的Java方法,这意味着我们可以在不刷新整个页面的情况下更新分页组件。通过DWR,你可以创建一个JavaScript对象,该对象映射到服务器上的一个服务类,服务类负责...
DisplayTag是一个功能强大的开源库,主要用于生成表格和提供分页功能,而Struts2则是一个MVC框架,用于处理用户请求和业务逻辑。将两者整合可以实现高效、美观的分页效果。 首先,我们需要了解Struts2的基本架构。...
通过上述步骤,我们已经成功实现了基于Struts2 和 EasyUI 的增删改查及分页排序功能。虽然过程中可能会遇到一些小问题,比如参数传递不正确、页面布局调整等,但只要保持耐心和细心,逐一排查问题所在,就能够顺利...
例如,可以使用Spring Data JPA的Pageable接口,或者在Struts中引入第三方的分页组件,如DisplayTag或Paginator。重要的是理解分页的基本原理,并能够灵活地将其应用到不同的框架和环境中。在实际开发中,应关注用户...
2. **分页模型组件**:创建另一个JavaBean,例如`PageBean`,它的作用是存储关于分页的信息,如当前页、每页显示的记录数、总页数等。`PageBean`可以根据`Book`的ArrayList来计算这些信息。 3. **控制器组件**:...
Struts是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,它由Apache软件基金会维护。这个DEMO项目展示了如何使用Struts来实现常见的Web应用功能,包括分页、增删改查操作、Tiles布局以及国际化支持。...
本项目“mybatis分页(struts2+spring+mybatis)”演示了如何在Java Web应用中实现基于MyBatis的分页功能,结合Struts2和Spring框架,提供了一个完整的解决方案。下面将详细解释这个项目涉及的知识点。 1. **...
**基于Struts2的BBS项目** Struts2是一个强大的MVC(Model-View-Controller)框架,广泛应用于Java Web开发。在这个基于Struts2的BBS项目中,开发者利用了Struts2的核心优势,构建了一个功能完善的论坛系统。下面...