- 浏览: 10523 次
- 性别:
- 来自: 上海
文章分类
最新评论
[代码] 自定义标签库中的用于输出表格分页按钮的组件
view sourceprint?
01 public class PageTagComponent extends Component {
02 /**
03 * 分页工具
04 */
05 private PageUtil pageUtil;
06 /**
07 * 数据读取URL
08 */
09 private String action = "#";
10
11 private String firstPageHTML = "";
12 private String prePageHTML = "";
13 private String nextPageHTML = "";
14 private String lastPageHTML = "";
15 private String currentPageHTML = "";
16 private String totalPageHTML = "";
17
18 public PageTagComponent(ValueStack stack) {
19 super(stack);
20 }
21
22 /**
23 * <div>
24 * <a>首页</a><a>上一页</a><a>下一页</a><a>尾页</a><span>当前页:13</span><span>总页数:54
25 * </span> </div>
26 */
27 @Override
28 public boolean start(Writer writer) {
29 generateHTML();
30 StringBuilder sb = new StringBuilder();
31 sb.append(firstPageHTML);
32 sb.append(prePageHTML);
33 sb.append(nextPageHTML);
34 sb.append(lastPageHTML);
35 sb.append(currentPageHTML);
36 sb.append(totalPageHTML);
37
38 try {
39 writer.write(sb.toString());
40 } catch (IOException e) {
41 e.printStackTrace();
42 }
43 return super.start(writer);
44 }
45
46 private void generateHTML() {
47 if (pageUtil.getCurrentPageCount() - 1 <= 1) {
48 prePageHTML = "<a href='" + action + "?pageUtil.currentPageCount=1'>上一页</a>";
49 } else {
50 prePageHTML = "<a href='" + action + "?pageUtil.currentPageCount=" + (pageUtil.getCurrentPageCount() - 1) + "'>上一页</a>";
51 }
52
53 if (pageUtil.getCurrentPageCount() + 1 >= pageUtil.getPageCount()) {
54 nextPageHTML = "<a href='" + action + "?pageUtil.currentPageCount=" + pageUtil.getPageCount() + "'>下一页</a>";
55 } else {
56 nextPageHTML = "<a href='" + action + "?pageUtil.currentPageCount=" + (pageUtil.getCurrentPageCount() + 1) + "'>下一页</a>";
57 }
58
59 firstPageHTML = "<a href='" + action + "?pageUtil.currentPageCount=1'>首页</a>";
60 lastPageHTML = "<a href='" + action + "?pageUtil.currentPageCount=" + pageUtil.getPageCount() + "'>尾页</a>";
61 currentPageHTML = "<span>当前页:" + pageUtil.getCurrentPageCount() + "</span>";
62 totalPageHTML = "<span>总页数:" + pageUtil.getPageCount() + "</span>";
63 }
64 }
[代码] 自定义的分页标签
view sourceprint?
01 public class PageTag extends ComponentTagSupport {
02 /**
03 * 分页工具
04 */
05 private PageUtil pageUtil;
06 /**
07 * 数据读取URL
08 */
09 private String action = "#";
10
11 @Override
12 public Component getBean(ValueStack valueStack, HttpServletRequest request, HttpServletResponse response) {
13 return new PageTagComponent(valueStack);
14 }
15
16 @Override
17 protected void populateParams() {
18 super.populateParams();
19 PageTagComponent pageTageComponent = (PageTagComponent) component;
20 pageTageComponent.setPageUtil(pageUtil);
21 pageTageComponent.setAction(action);
22 }
23 }
[代码] Action中处理用户请求的方法
view sourceprint?
1 public String Search() {
2 pageUtil = ipAddressService.getAllIpAddress(pageUtil,ip);
3 return "Search"+ SUCCESS;
4 }
[代码] Service中初始化分页组件
view sourceprint?
1 public PageUtil getAllIpAddress(PageUtil pageUtil, String ip) {
2 pageUtil.setTotalCount(getAllIpAddress().size());
3 return ipAddressHibernateDao.queryAllEntity("from IpAddress where ip = " + ip, pageUtil);
4 }
[代码] Dao中的分页查询
view sourceprint?
01 public PageUtil queryAllEntity(final String hql, PageUtil pageUtil) {
02 if (pageUtil == null) {
03 pageUtil = new PageUtil();
04 }
05 final int startRows = pageUtil.getPageSize() * (pageUtil.getCurrentPageCount() - 1);
06 final int rowSize = pageUtil.getPageSize();
07 List result = getHibernateTemplate().executeFind(new HibernateCallback() {
08 @Override
09 public Object doInHibernate(Session session) throws HibernateException, SQLException {
10 Query query = session.createQuery(hql);
11 query.setFirstResult(startRows);
12 query.setMaxResults(rowSize);
13 return query.list();
14 }
15 });
16 pageUtil.setDatas(result);
17 return pageUtil;
18 }
[代码] JSP中tag的使用以及表格内容的显示
view sourceprint?
01 <%@taglib prefix="wu" uri="/web-utils" %>
02 <table class="table" width="850px">
03 <thead>
04 <tr>
05 <th width="50px"><s:text name="title.index"/></th>
06 <th width="100px"><s:text name="title.ipAddress.ip"/></th>
07 <th width="100px"><s:text name="title.ipAddress.mac"/></th>
08 <th width="100px"><s:text name="title.ipAddress.switchIP"/></th>
09 <th width="100px"><s:text name="title.ipAddress.port"/></th>
10 <th width="100px"><s:text name="title.ipAddress.addressRemark"/></th>
11 <th width="100px"><s:text name="title.ipAddress.addressState"/></th>
12 <th width="100px"><s:text name="title.ipAddress.addressType"/></th>
13 <th width="100px"><s:text name="title.operation"/></th>
14 </tr>
15 </thead>
16 <tbody>
17 <s:if test="pageUtil.datas.size > 0">
18 <s:iterator value="pageUtil.datas" status="ipAddress">
19 <tr>
20 <td width="50px"><s:property value="#ipAddress.index + 1"/></td>
21 <td width="100px"><a href="<s:url action='ipAddressDetailAction' namespace='/admin'/>?id=${id}"><s:property value="ip"/></a></td>
22 <td width="100px"><s:property value="mac"/></td>
23 <td width="100px"><s:property value="switchIp"/></td>
24 <td width="100px"><s:property value="port"/></td>
25 <td width="100px"><a href="<s:url action='ipAddressRemarkDetailAction' namespace='/admin'/>?id=${ipAddressRemark.id}"><s:property value="ipAddressRemark.remarkName"/></a></td>
26 <td width="100px"><a href="<s:url action='ipAddressStateDetailAction' namespace='/admin'/>?id=${ipAddressState.id}"><s:property value="ipAddressState.stateName"/></a></td>
27 <td width="100px"><a href="<s:url action='ipAddressTypeDetailAction' namespace='/admin'/>?id=${ipAddressType.id}"><s:property value="ipAddressType.typeName"/></a></td>
28 <td width="100px">
29 <a href="<s:url action='ipAddressEditPageAction' namespace='/admin'/>?id=${id}"><s:text name="button.edit"></s:text></a>
30 <a href="<s:url action='ipAddressDeleteAction' namespace='/admin'/>?id=${id}"><s:text name="button.delete"></s:text></a>
31 </td>
32 </tr>
33 </s:iterator>
34 </s:if>
35 <s:else>
36 <tr><td colspan="9" class="tdNoData"><s:text name="label.noData"/></td></tr>
37 </s:else>
38 </tbody>
39 </table>
40 <s:if test="pageUtil.pageCount > 1">
41 <div class="pageTag" style="width: 850px;">
42 <s:url action='ipAddressListAction' namespace='/admin' var="address"/>
43 <wu:page action="${address}" pageUtil="${pageUtil}"/>
44 </div>
45 </s:if>
[代码] 自定义标签配置文件
view sourceprint?01 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
02 <taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
03 version="2.0"
04 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd">
05 <display-name>"Web Utils"</display-name>
06 <tlib-version>1.0</tlib-version>
07 <short-name>wu</short-name>
08 <uri>/web-utils</uri>
09 <tag>
10 <description><![CDATA[Print table pages]]></description>
11 <name>page</name>
12 <tag-class>com.kmairport.webapp.tag.PageTag</tag-class>
13 <body-content>empty</body-content>
14 <attribute>
15 <description><![CDATA[request address]]></description>
16 <name>action</name>
17 <required>true</required>
18 <rtexprvalue>true</rtexprvalue>
19 </attribute>
20 <attribute>
21 <description><![CDATA[page util]]></description>
22 <name>pageUtil</name>
23 <required>true</required>
24 <rtexprvalue>true</rtexprvalue>
25 </attribute>
26 </tag>
27 </taglib>
28 备注:该文件保存为web-utils.tld,放在WEB-INF/目录下
view sourceprint?
01 public class PageTagComponent extends Component {
02 /**
03 * 分页工具
04 */
05 private PageUtil pageUtil;
06 /**
07 * 数据读取URL
08 */
09 private String action = "#";
10
11 private String firstPageHTML = "";
12 private String prePageHTML = "";
13 private String nextPageHTML = "";
14 private String lastPageHTML = "";
15 private String currentPageHTML = "";
16 private String totalPageHTML = "";
17
18 public PageTagComponent(ValueStack stack) {
19 super(stack);
20 }
21
22 /**
23 * <div>
24 * <a>首页</a><a>上一页</a><a>下一页</a><a>尾页</a><span>当前页:13</span><span>总页数:54
25 * </span> </div>
26 */
27 @Override
28 public boolean start(Writer writer) {
29 generateHTML();
30 StringBuilder sb = new StringBuilder();
31 sb.append(firstPageHTML);
32 sb.append(prePageHTML);
33 sb.append(nextPageHTML);
34 sb.append(lastPageHTML);
35 sb.append(currentPageHTML);
36 sb.append(totalPageHTML);
37
38 try {
39 writer.write(sb.toString());
40 } catch (IOException e) {
41 e.printStackTrace();
42 }
43 return super.start(writer);
44 }
45
46 private void generateHTML() {
47 if (pageUtil.getCurrentPageCount() - 1 <= 1) {
48 prePageHTML = "<a href='" + action + "?pageUtil.currentPageCount=1'>上一页</a>";
49 } else {
50 prePageHTML = "<a href='" + action + "?pageUtil.currentPageCount=" + (pageUtil.getCurrentPageCount() - 1) + "'>上一页</a>";
51 }
52
53 if (pageUtil.getCurrentPageCount() + 1 >= pageUtil.getPageCount()) {
54 nextPageHTML = "<a href='" + action + "?pageUtil.currentPageCount=" + pageUtil.getPageCount() + "'>下一页</a>";
55 } else {
56 nextPageHTML = "<a href='" + action + "?pageUtil.currentPageCount=" + (pageUtil.getCurrentPageCount() + 1) + "'>下一页</a>";
57 }
58
59 firstPageHTML = "<a href='" + action + "?pageUtil.currentPageCount=1'>首页</a>";
60 lastPageHTML = "<a href='" + action + "?pageUtil.currentPageCount=" + pageUtil.getPageCount() + "'>尾页</a>";
61 currentPageHTML = "<span>当前页:" + pageUtil.getCurrentPageCount() + "</span>";
62 totalPageHTML = "<span>总页数:" + pageUtil.getPageCount() + "</span>";
63 }
64 }
[代码] 自定义的分页标签
view sourceprint?
01 public class PageTag extends ComponentTagSupport {
02 /**
03 * 分页工具
04 */
05 private PageUtil pageUtil;
06 /**
07 * 数据读取URL
08 */
09 private String action = "#";
10
11 @Override
12 public Component getBean(ValueStack valueStack, HttpServletRequest request, HttpServletResponse response) {
13 return new PageTagComponent(valueStack);
14 }
15
16 @Override
17 protected void populateParams() {
18 super.populateParams();
19 PageTagComponent pageTageComponent = (PageTagComponent) component;
20 pageTageComponent.setPageUtil(pageUtil);
21 pageTageComponent.setAction(action);
22 }
23 }
[代码] Action中处理用户请求的方法
view sourceprint?
1 public String Search() {
2 pageUtil = ipAddressService.getAllIpAddress(pageUtil,ip);
3 return "Search"+ SUCCESS;
4 }
[代码] Service中初始化分页组件
view sourceprint?
1 public PageUtil getAllIpAddress(PageUtil pageUtil, String ip) {
2 pageUtil.setTotalCount(getAllIpAddress().size());
3 return ipAddressHibernateDao.queryAllEntity("from IpAddress where ip = " + ip, pageUtil);
4 }
[代码] Dao中的分页查询
view sourceprint?
01 public PageUtil queryAllEntity(final String hql, PageUtil pageUtil) {
02 if (pageUtil == null) {
03 pageUtil = new PageUtil();
04 }
05 final int startRows = pageUtil.getPageSize() * (pageUtil.getCurrentPageCount() - 1);
06 final int rowSize = pageUtil.getPageSize();
07 List result = getHibernateTemplate().executeFind(new HibernateCallback() {
08 @Override
09 public Object doInHibernate(Session session) throws HibernateException, SQLException {
10 Query query = session.createQuery(hql);
11 query.setFirstResult(startRows);
12 query.setMaxResults(rowSize);
13 return query.list();
14 }
15 });
16 pageUtil.setDatas(result);
17 return pageUtil;
18 }
[代码] JSP中tag的使用以及表格内容的显示
view sourceprint?
01 <%@taglib prefix="wu" uri="/web-utils" %>
02 <table class="table" width="850px">
03 <thead>
04 <tr>
05 <th width="50px"><s:text name="title.index"/></th>
06 <th width="100px"><s:text name="title.ipAddress.ip"/></th>
07 <th width="100px"><s:text name="title.ipAddress.mac"/></th>
08 <th width="100px"><s:text name="title.ipAddress.switchIP"/></th>
09 <th width="100px"><s:text name="title.ipAddress.port"/></th>
10 <th width="100px"><s:text name="title.ipAddress.addressRemark"/></th>
11 <th width="100px"><s:text name="title.ipAddress.addressState"/></th>
12 <th width="100px"><s:text name="title.ipAddress.addressType"/></th>
13 <th width="100px"><s:text name="title.operation"/></th>
14 </tr>
15 </thead>
16 <tbody>
17 <s:if test="pageUtil.datas.size > 0">
18 <s:iterator value="pageUtil.datas" status="ipAddress">
19 <tr>
20 <td width="50px"><s:property value="#ipAddress.index + 1"/></td>
21 <td width="100px"><a href="<s:url action='ipAddressDetailAction' namespace='/admin'/>?id=${id}"><s:property value="ip"/></a></td>
22 <td width="100px"><s:property value="mac"/></td>
23 <td width="100px"><s:property value="switchIp"/></td>
24 <td width="100px"><s:property value="port"/></td>
25 <td width="100px"><a href="<s:url action='ipAddressRemarkDetailAction' namespace='/admin'/>?id=${ipAddressRemark.id}"><s:property value="ipAddressRemark.remarkName"/></a></td>
26 <td width="100px"><a href="<s:url action='ipAddressStateDetailAction' namespace='/admin'/>?id=${ipAddressState.id}"><s:property value="ipAddressState.stateName"/></a></td>
27 <td width="100px"><a href="<s:url action='ipAddressTypeDetailAction' namespace='/admin'/>?id=${ipAddressType.id}"><s:property value="ipAddressType.typeName"/></a></td>
28 <td width="100px">
29 <a href="<s:url action='ipAddressEditPageAction' namespace='/admin'/>?id=${id}"><s:text name="button.edit"></s:text></a>
30 <a href="<s:url action='ipAddressDeleteAction' namespace='/admin'/>?id=${id}"><s:text name="button.delete"></s:text></a>
31 </td>
32 </tr>
33 </s:iterator>
34 </s:if>
35 <s:else>
36 <tr><td colspan="9" class="tdNoData"><s:text name="label.noData"/></td></tr>
37 </s:else>
38 </tbody>
39 </table>
40 <s:if test="pageUtil.pageCount > 1">
41 <div class="pageTag" style="width: 850px;">
42 <s:url action='ipAddressListAction' namespace='/admin' var="address"/>
43 <wu:page action="${address}" pageUtil="${pageUtil}"/>
44 </div>
45 </s:if>
[代码] 自定义标签配置文件
view sourceprint?01 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
02 <taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
03 version="2.0"
04 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd">
05 <display-name>"Web Utils"</display-name>
06 <tlib-version>1.0</tlib-version>
07 <short-name>wu</short-name>
08 <uri>/web-utils</uri>
09 <tag>
10 <description><![CDATA[Print table pages]]></description>
11 <name>page</name>
12 <tag-class>com.kmairport.webapp.tag.PageTag</tag-class>
13 <body-content>empty</body-content>
14 <attribute>
15 <description><![CDATA[request address]]></description>
16 <name>action</name>
17 <required>true</required>
18 <rtexprvalue>true</rtexprvalue>
19 </attribute>
20 <attribute>
21 <description><![CDATA[page util]]></description>
22 <name>pageUtil</name>
23 <required>true</required>
24 <rtexprvalue>true</rtexprvalue>
25 </attribute>
26 </tag>
27 </taglib>
28 备注:该文件保存为web-utils.tld,放在WEB-INF/目录下
相关推荐
在这个基于Struts2的自定义分页标签的实践中,我们将深入探讨如何创建、配置和使用自定义标签来实现数据的分页展示,同时与Oracle数据库进行交互。 首先,理解分页的基本概念至关重要。分页是将大量数据分成小块,...
总的来说,SSH框架整合通用模板提供了一个成熟的开发环境,通过自定义标签分页、通用DAO和服务,使得开发人员可以快速构建应用,同时降低了维护成本。对于初学者或熟悉SSH的开发者来说,这是一个很好的学习和实践的...
本项目中,我们将深入探讨如何利用SSH集成实现一个具备分页功能的系统,并了解如何通过自定义标签来呈现分页数据。 首先,SSH框架的集成是项目的核心部分。Struts2作为控制器,负责处理HTTP请求并调度业务逻辑;...
在Java企业级项目开发中,分页功能是一个非常常见的需求,尤其在大数据量展示时,为了提高用户体验并优化服务器性能,通常会...通过SSH框架的整合和自定义标签的实现,开发者可以更高效地处理大规模数据的分页展示。
本文介绍了一种基于SSH(Struts + Spring + Hibernate)架构的分页查询解决方案,通过利用JSP自定义标签技术和Hibernate Query Language (HQL),实现了分页查询功能的高度封装,使得分页查询变得简单、高效且易于...
6. **自定义标签库**:小范分页控件是一个定制的JSP标签库,它提供了丰富的属性和方法,如当前页、总页数、跳转页数等,方便开发者在JSP页面中灵活地展示和控制分页。 7. **样式与交互**:虽然标签库提供了基本的...
5. **视图展示**:Struts2的Result将Action返回的数据传给JSP页面,JSP页面通过标签库(如DisplayTag)或者自定义标签显示分页信息和数据。 6. **前端交互**:前端页面通常有上一页、下一页、跳转页码等按钮,点击...
可以使用Struts2的拦截器或自定义标签库帮助实现分页链接。 **5. 分页优化** - **缓存策略**:考虑使用二级缓存,如Hibernate的EHCache,减少对数据库的查询次数。 - **索引优化**:为用于分页查询的字段创建数据库...
6. **JSP视图展示**:最后,这些分页信息会被传递到JSP页面,使用JSTL或其他标签库(如DisplayTag)来展示分页链接和数据。用户可以通过点击链接跳转到不同页码。 7. **URL参数设计**:在URL中,通常会有表示页码的...
- Service层将查询结果封装到一个自定义的Bean类中,包括实际的数据列表和关于分页的信息,如总页数、当前页码等。 - Action将这个Bean传递给JSP页面,JSP页面可以根据这些信息展示分页链接和数据。 6. **JSP页面...
NULL 博文链接:https://ap0406708.iteye.com/blog/537709
5. 分页视图渲染:在Struts2中,可以通过Action返回一个包含分页信息的对象,然后在JSP页面上利用标签库(如DisplayTag或自定义标签)来展示分页导航。 BIRT(Business Intelligence and Reporting Tools)是一个...
四、自定义分页类 为了提高代码复用性,通常我们会创建一个通用的分页类,它包括了页码、每页数量、总记录数、总页数等属性,以及构造函数、获取当前页数据的方法。在DAO层,我们可以调用这个分页类,根据其参数...
这里的`PaginationInterceptor`是你自定义的分页拦截器,它可以计算出正确的页码并将其设置到ActionContext中。 综上所述,SSH2实现的分页查询涉及了Struts2的Action、Service、页面展示,以及配置文件等多个方面。...
5. **创建JSP页面**:使用Struts的标签库(如`displaytag`或自定义标签)展示分页结果,同时提供导航链接,使用户可以浏览不同页面。 6. **事务管理**:确保在`applicationContext.xml`中配置好事务管理器,因为...
4. **结果封装**:将查询到的数据封装到一个自定义的分页实体类中,该类包含当前页数据列表和分页信息(如总页数、当前页数等)。 5. **视图渲染**:在Action类中,将分页实体返回给Struts2的Result,通常是JSP页面...
可以使用JSP标签库(如DisplayTag)、JavaScript库(如jQuery Pagination)或者现代前端框架(如Vue.js、React)来实现用户交互的分页界面。 6. **性能优化**: 分页组件的性能优化包括避免全表扫描、使用索引、...
最后,在视图层,使用Struts2的标签库或者自定义标签来遍历`PageBean`中的数据并展示。同时,提供上一页、下一页、跳转页码等导航元素,根据`currentPage`和`totalPage`计算出这些元素的可用状态。 总的来说,SSH...
- 使用Struts2的拦截器(interceptor)或者自定义标签库实现分页参数的传递。例如,通过`params`拦截器接收请求中的页码和每页记录数。 - 在Action的execute方法中,调用Service来处理分页逻辑,并将结果传递到视...
可以创建一个通用的分页标签库(TagLib),用于处理分页链接的生成,如“上一页”,“下一页”和页码列表。这些链接的生成需要结合请求参数(当前页和每页大小)和总记录数。 总结: SSH框架下的分页处理涵盖了从...