- 浏览: 24084 次
- 性别:
- 来自: 武汉
最新评论
-
liuguofeng:
楼主,我也出现这个问题,在读取100w条数据的时间就出现这个问 ...
Software caused connection abort: socket write err -
tanzhengping11:
太难了,点啊,有没有简单点的啊.
struts2分页标签 -
damezc:
网上查了一下,发现mac os 自带apachehttp:// ...
在mac os x 10.4 tiger上安装apache2 -
mysyche:
对于初学者,如何使用呀?
struts2分页标签 -
holybless:
fsdgdsg
struts2分页标签
实现自定义struts2标签分三个部分:
1.定义标签 在这步要创建标签说明文件 *.tld
2.实现标签组件 这里只需继承struts2中的组件类和标签类就行了
3.用freemarker渲染标签 这步要创建一个*.ftl文件.同时我把相关分页逻辑也写在了这里
下面是效果图
下面是源代码:
在/web-inf下建立tlds文件夹,在其中新建iThink.tld文件(名字随个人喜好),内容如下:
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!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>2.2.3</tlib-version> <jsp-version>1.2</jsp-version> <short-name>ithink</short-name> <uri>/ithink-tags</uri> <display-name>"iThink Tags"</display-name> <description><![CDATA["iThink is a student team. iThink Tags supports custom components that usually used in web develop"]]></description> <tag> <name>pager</name> <tag-class>org.icim.pager.struts2.PagerTag</tag-class> <body-content>JSP</body-content> <attribute> <name>totalRecord</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description><![CDATA[总记录数]]></description> </attribute> <attribute> <name>totalPage</name> <required>true</required> <rtexprvalue>true</rtexprvalue> <description><![CDATA[总页数]]></description> </attribute> <attribute> <name>curPage</name> <required>true</required> <rtexprvalue>true</rtexprvalue> <description><![CDATA[当前页号]]></description> </attribute> <attribute> <name>pageLimit</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description><![CDATA[每版最多显示的页数,最好为奇数]]></description> </attribute> <attribute> <name>url</name> <required>true</required> <rtexprvalue>true</rtexprvalue> <description><![CDATA[翻页时的请求地址,如:list?page={page},其中的{page}会被动态地替换]]></description> </attribute> <attribute> <name>curCssClass</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description><![CDATA[当前页的span标签的cssClass]]></description> </attribute> <attribute> <name>showTotalPage</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description><![CDATA[是否显示总页数,默认为"true"]]></description> </attribute> <attribute> <name>showTotalRecord</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description><![CDATA[是否显示总记录数,只有设置了总记录数属性的时候才有效,默认为"false"]]></description> </attribute> <attribute> <name>directJumpType</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description><![CDATA[直接跳转的方式,"goto"或"select",默认为none]]></description> </attribute> <!--以下是原UIBean通用的属性--> <attribute> <name>accesskey</name> <required>false</required> <rtexprvalue>false</rtexprvalue> <description><![CDATA[Set the html accesskey attribute on rendered html element]]></description> </attribute> <attribute> <name>cssClass</name> <required>false</required> <rtexprvalue>false</rtexprvalue> <description><![CDATA[The css class to use for element]]></description> </attribute> <attribute> <name>cssStyle</name> <required>false</required> <rtexprvalue>false</rtexprvalue> <description><![CDATA[The css style definitions for element to use]]></description> </attribute> <attribute> <name>disabled</name> <required>false</required> <rtexprvalue>false</rtexprvalue> <description><![CDATA[Set the html disabled attribute on rendered html element]]></description> </attribute> <attribute> <name>id</name> <required>false</required> <rtexprvalue>false</rtexprvalue> <description><![CDATA[id for referencing element. For UI and form tags it will be used as HTML id attribute]]></description> </attribute> <attribute> <name>key</name> <required>false</required> <rtexprvalue>false</rtexprvalue> <description><![CDATA[Set the key (name, value, label) for this particular component]]></description> </attribute> <attribute> <name>label</name> <required>false</required> <rtexprvalue>false</rtexprvalue> <description><![CDATA[Label expression used for rendering a element specific label]]></description> </attribute> <attribute> <name>labelposition</name> <required>false</required> <rtexprvalue>false</rtexprvalue> <description><![CDATA[Define label position of form element (top/left)]]></description> </attribute> <attribute> <name>name</name> <required>false</required> <rtexprvalue>false</rtexprvalue> <description><![CDATA[The name to set for element]]></description> </attribute> <attribute> <name>onblur</name> <required>false</required> <rtexprvalue>false</rtexprvalue> <description><![CDATA[ Set the html onblur attribute on rendered html element]]></description> </attribute> <attribute> <name>onchange</name> <required>false</required> <rtexprvalue>false</rtexprvalue> <description><![CDATA[Set the html onchange attribute on rendered html element]]></description> </attribute> <attribute> <name>onclick</name> <required>false</required> <rtexprvalue>false</rtexprvalue> <description><![CDATA[Set the html onclick attribute on rendered html element]]></description> </attribute> <attribute> <name>ondblclick</name> <required>false</required> <rtexprvalue>false</rtexprvalue> <description><![CDATA[Set the html ondblclick attribute on rendered html element]]></description> </attribute> <attribute> <name>onfocus</name> <required>false</required> <rtexprvalue>false</rtexprvalue> <description><![CDATA[Set the html onfocus attribute on rendered html element]]></description> </attribute> <attribute> <name>onkeydown</name> <required>false</required> <rtexprvalue>false</rtexprvalue> <description><![CDATA[Set the html onkeydown attribute on rendered html element]]></description> </attribute> <attribute> <name>onkeypress</name> <required>false</required> <rtexprvalue>false</rtexprvalue> <description><![CDATA[Set the html onkeypress attribute on rendered html element]]></description> </attribute> <attribute> <name>onkeyup</name> <required>false</required> <rtexprvalue>false</rtexprvalue> <description><![CDATA[Set the html onkeyup attribute on rendered html element]]></description> </attribute> <attribute> <name>onmousedown</name> <required>false</required> <rtexprvalue>false</rtexprvalue> <description><![CDATA[Set the html onmousedown attribute on rendered html element]]></description> </attribute> <attribute> <name>onmousemove</name> <required>false</required> <rtexprvalue>false</rtexprvalue> <description><![CDATA[Set the html onmousemove attribute on rendered html element]]></description> </attribute> <attribute> <name>onmouseout</name> <required>false</required> <rtexprvalue>false</rtexprvalue> <description><![CDATA[Set the html onmouseout attribute on rendered html element]]></description> </attribute> <attribute> <name>onmouseover</name> <required>false</required> <rtexprvalue>false</rtexprvalue> <description><![CDATA[Set the html onmouseover attribute on rendered html element]]></description> </attribute> <attribute> <name>onmouseup</name> <required>false</required> <rtexprvalue>false</rtexprvalue> <description><![CDATA[Set the html onmouseup attribute on rendered html element]]></description> </attribute> <attribute> <name>onselect</name> <required>false</required> <rtexprvalue>false</rtexprvalue> <description><![CDATA[Set the html onselect attribute on rendered html element]]></description> </attribute> <attribute> <name>required</name> <required>false</required> <rtexprvalue>false</rtexprvalue> <description><![CDATA[If set to true, the rendered element will indicate that input is required]]></description> </attribute> <attribute> <name>requiredposition</name> <required>false</required> <rtexprvalue>false</rtexprvalue> <description><![CDATA[Define required position of required form element (left|right)]]></description> </attribute> <attribute> <name>tabindex</name> <required>false</required> <rtexprvalue>false</rtexprvalue> <description><![CDATA[Set the html tabindex attribute on rendered html element]]></description> </attribute> <attribute> <name>template</name> <required>false</required> <rtexprvalue>false</rtexprvalue> <description><![CDATA[The template (other than default) to use for rendering the element]]></description> </attribute> <attribute> <name>templateDir</name> <required>false</required> <rtexprvalue>false</rtexprvalue> <description><![CDATA[The template directory.]]></description> </attribute> <attribute> <name>theme</name> <required>false</required> <rtexprvalue>false</rtexprvalue> <description><![CDATA[The theme (other than default) to use for rendering the element]]></description> </attribute> <attribute> <name>title</name> <required>false</required> <rtexprvalue>false</rtexprvalue> <description><![CDATA[Set the html title attribute on rendered html element]]></description> </attribute> <attribute> <name>tooltip</name> <required>false</required> <rtexprvalue>false</rtexprvalue> <description><![CDATA[Set the tooltip of this particular component]]></description> </attribute> <attribute> <name>tooltipConfig</name> <required>false</required> <rtexprvalue>false</rtexprvalue> <description><![CDATA[Set the tooltip configuration]]></description> </attribute> <attribute> <name>value</name> <required>false</required> <rtexprvalue>false</rtexprvalue> <description><![CDATA[Preset the value of input element.]]></description> </attribute> </tag> <tag> <name>textfield</name> <tag-class>org.apache.struts2.views.jsp.ui.TextFieldTag</tag-class> <body-content>JSP</body-content> <description><![CDATA[Render an HTML input field of type text]]></description> </tag> </taglib>
原UIBean通用的属性我是直接从struts2源代码包里面copy来的.支持属性非常丰富.呵呵
建立组件类和标签类:
Pager.java:
/*********************************************************************** * * Pager.java * * @creator Bruce Tsai * @create-time Jun 12, 2009 10:53:38 PM ***********************************************************************/ package org.icim.pager.struts2; import org.apache.struts2.components.UIBean; import org.apache.struts2.views.annotations.StrutsTag; import org.apache.struts2.views.annotations.StrutsTagAttribute; import com.opensymphony.xwork2.util.ValueStack; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * struts2版的分页标签 * */ @StrutsTag(name = "pager", tldTagClass = "org.icim.pager.struts2.PagerTag", description = "struts2 pager by ithink") public class Pager extends UIBean { final public static String TEMPLATE = "pager"; protected String totalRecord; protected String totalPage; protected String curPage; protected String pageLimit; protected String url; protected String curCssClass; protected String showTotalPage; protected String showTotalRecord; protected String directJumpType; public Pager(ValueStack stack, HttpServletRequest request, HttpServletResponse response) { super(stack, request, response); } /** * 用于返回模板的名字,Struts2会自动在后面加入.ftl扩展名以找到特定的模板文件。 */ @Override protected String getDefaultTemplate() { return TEMPLATE; } /** * 设置UIBean的属性,一般Tag中有几个这样的属性,这里就有几个 StrutsTagAttribute注解,说明该属性是int类型,这一步很重要 * * @param totalPage */ @StrutsTagAttribute(description = "total records", type = "Long") public void setTotalRecord(String totalRecord) { this.totalRecord = totalRecord; } @StrutsTagAttribute(description = "total pages", type = "Integer") public void setTotalPage(String totalPage) { this.totalPage = totalPage; } @StrutsTagAttribute(description = "current page", type = "Integer") public void setCurPage(String curPage) { this.curPage = curPage; } @StrutsTagAttribute(description = "how many pages in a panel once", type = "Integer") public void setPageLimit(String pageLimit) { this.pageLimit = pageLimit; } @StrutsTagAttribute(description = "url to be linked", type = "String") public void setUrl(String url) { this.url = url; } @StrutsTagAttribute(description = "css style of current page", type = "String") public void setCurCssClass(String curCssClass) { this.curCssClass = curCssClass; } @StrutsTagAttribute(description = "whether to show totalPage", type = "Boolean", defaultValue = "true") public void setShowTotalPage(String showTotalPage) { this.showTotalPage = showTotalPage; } @StrutsTagAttribute(description = "whether to show currentPage", type = "Boolean", defaultValue = "false") public void setShowTotalRecord(String showTotalRecord) { this.showTotalRecord = showTotalRecord; } // TODO 直接页面跳转 // 这里的directJumpType默认值为none, 可选值为 'select', 'goto' @StrutsTagAttribute(description = "show type of direct jump type. such as select,textbox which can lead going to a page directly", type = "String", defaultValue = "none") public void setDirectJumpType(String directJumpType) { this.directJumpType = directJumpType; } /** * 重写evaluateExtraParams()方法,在UIBean初始化后会调用这个方法来初始化设定参数,如addParameter方法,会在freemarker里的parameters里加入一个key * value。这里要注意findString,还有相关的findxxxx方法,它们是已经封装好了的解释ognl语法的工具,具体是怎么样的,大家可以查看一下UIBean的api * doc */ @Override protected void evaluateExtraParams() { super.evaluateExtraParams(); // findValue()方法本身已对OGNL进行了处理 if (totalRecord != null) { addParameter("totalRecord", findValue(totalRecord)); } if (totalPage != null) { addParameter("totalPage", findValue(totalPage)); } if (curPage != null) { addParameter("curPage", findValue(curPage)); } if (pageLimit != null) { addParameter("pageLimit", findValue(pageLimit)); } if (url != null) { addParameter("url", findValue(url, String.class)); } if (curCssClass != null) { addParameter("curCssClass", findValue(curCssClass,String.class)); } if (showTotalPage != null) { addParameter("showTotalPage", findValue(showTotalPage, Boolean.class)); } if (showTotalRecord != null) { addParameter("showTotalRecord", findValue(showTotalRecord,Boolean.class)); } if (directJumpType != null) { addParameter("directJumpType", findValue(directJumpType)); } } }
PagerTag.java:
/*********************************************************************** * * PagerTag.java * * @creator Bruce Tsai * @create-time Jun 13, 2009 12:08:53 AM ***********************************************************************/ package org.icim.pager.struts2; import org.apache.struts2.views.jsp.ui.AbstractUITag; import org.apache.struts2.components.Component; import com.opensymphony.xwork2.util.ValueStack; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * struts2 版分页标签 */ public class PagerTag extends AbstractUITag { private static final long serialVersionUID = 719669934024053141L; protected String totalRecord; protected String totalPage; protected String curPage; protected String pageLimit; protected String url; protected String curCssClass; protected String showTotalPage; protected String showTotalRecord; protected String directJumpType; protected void populateParams() { super.populateParams(); Pager pager = (Pager) component; pager.setTotalRecord(totalRecord); pager.setTotalPage(totalPage); pager.setCurPage(curPage); pager.setPageLimit(pageLimit); pager.setUrl(url); pager.setCurCssClass(curCssClass); pager.setShowTotalPage(showTotalPage); pager.setShowTotalRecord(showTotalRecord); pager.setDirectJumpType(directJumpType); } @Override public Component getBean(ValueStack stack, HttpServletRequest request, HttpServletResponse response) { return new Pager(stack, request, response); } public void setTotalRecord(String totalRecord){ this.totalRecord = totalRecord; } public void setTotalPage(String totalPage) { this.totalPage = totalPage; } public void setCurPage(String curPage) { this.curPage = curPage; } public void setPageLimit(String pageLimit) { this.pageLimit = pageLimit; } public void setUrl(String url) { this.url = url; } public void setCurCssClass(String curCssClass) { this.curCssClass = curCssClass; } public void setShowTotalPage(String showTotalPage) { this.showTotalPage = showTotalPage; } public void setShowTotalRecord(String showTotalRecord) { this.showTotalRecord = showTotalRecord; } public void setDirectJumpType(String directJumpType) { this.directJumpType = directJumpType; } }
在类文件根目录下(在myeclipse中是在src目录下,发布后会copy到web-inf/classes/ 里)建立template/simple/ 目录,里面创建pager.ftl文件,内容如下:
<#--显示总记录数,只有同时设置了总记录数和显示总记录数时才有效--> <#if (parameters.totalRecord?exists) && (parameters.showTotalRecord?exists) && (parameters.showTotalRecord == true)> <span>${parameters.totalRecord}</span><#rt/> </#if> <#--打印选择页的面板 --> <#--首先,当parameters.pageLimit为空时将其设定为total--> <#if (parameters.pageLimit?exists)> <#assign limit = parameters.pageLimit /> <#else> <#assign limit = parameters.totalPage /> </#if> <@pagePanel cur=parameters.curPage total=parameters.totalPage url=parameters.url limitlimit=limit /> <#--打印选择页的面板结束--> <#--显示总页数--> <#if parameters.showTotalPage?exists && (parameters.showTotalPage == true)> <span>..${parameters.totalPage}</span><#rt/> </#if> <#--打印翻页面板的宏,配合printPage,printButton--> <#macro pagePanel cur total limit url curCssClass = "cur_page"><#--curCssClass默认值为cur_page--> <#--limit的中间数--> <#assign l_mid = (limit/2)?int + 1 /> <#--total的中间数--> <#assign t_mid = (total/2)?int /> <#--情况一:总页数小于等于限制显示页数,这时显示所有页--> <#if total <= limit> <@printButton direct="left" valuable = false /> <@printPage left = 1 right = total curcur = cur urlurl = url curCssClasscurCssClass = curCssClass /> <@printButton direct="right" valuable = false /> <#else> <#--情况二:总页数大于限制显示页数,这时又分三种情况--> <#--情况1:显示的limit个页号在total个页面中偏向左端,1作为最左边的页号,当前页没能显示在中间,偏左,例: total = 20,cur = 2,limit = 5.显示的页面为:1 [2] 3 4 5 这种情况 cur <= l_mid --> <#if cur <= l_mid> <@printButton direct="left" valuable = false /> <@printPage left = 1 right = limit curcur = cur urlurl = url curCssClasscurCssClass = curCssClass /> <@printButton direct="right" valuable = true /> <#--情况2:显示的limit个页号在total个页面中偏向右端,total作为最右边的页号,当前页没能显示在中间,偏右,例: total = 20,cur = 19,limit = 5.显示的页面为:16 17 18 [19] 20 这种情况 cur > total - l_mid --> <#elseif (cur > (total - l_mid))> <@printButton direct="left" valuable = true /> <@printPage left = (total - limit + 1) right = total curcur = cur urlurl = url curCssClasscurCssClass = curCssClass /> <@printButton direct="right" valuable = false /> <#--在中间的情况--> <#else> <@printButton direct="left" valuable = true /> <@printPage left = (cur - l_mid + 1) right = (cur + l_mid -1) curcur = cur urlurl = url curCssClasscurCssClass = curCssClass /> <@printButton direct="right" valuable = true /> </#if> </#if> </#macro> <#--根据最左与最右的页号来打印所显示的页面,当前页为的cssStyle为curCssClass--> <#macro printPage left right cur url curCssClass> <#list left..right as p> <#if p == cur> <span class = "${curCssClass}" >${p}</span><#rt/> <#else> <a href = "<@makeURL text=url page=p />">${p}</a><#rt/> </#if> </#list> </#macro> <#--翻页控制按钮,direct选择"left"或"right",avaluable设置是否有链接--> <#macro printButton direct valuable = true> <#if direct == "left"> <#if valuable> <a href="<@makeURL text=parameters.url page=1 />"> << </a><#rt/> <a href="<@makeURL text=parameters.url page=parameters.curPage-1 />"> < </a><#rt/> <#else> <span><<</span><#rt/> <span><</span><#rt/> </#if> <#else> <#if valuable> <a href="<@makeURL text=parameters.url page=parameters.curPage+1 />"> > </a><#rt/> <a href="<@makeURL text=parameters.url page=parameters.totalPage />"> >> </a><#rt/> <#else> <span>></span><#rt/> <span>>></span><#rt/> </#if> </#if> </#macro> <#--产生动态URL的宏--> <#macro makeURL text page> <#if text?last_index_of("{page}") < 0> ${text}?page=${page} <#else> ${text?replace("{page}",page)} </#if> </#macro>
最后,需要在你的struts.xml配置文件里做如下设置
<constant name="struts.ui.theme" value="simple" />
也就是对应之前建立的theme/simple目录
这样标签部分就做完了.下面使用标签.建立test.jsp
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ taglib prefix="s" uri="/struts-tags"%> <%@ taglib prefix="ithink" uri="/ithink-tags"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>pager tag test</title> </head> <body> <div class="pagination"> <ithink:pager curPage="3" totalPage="88" url="listPaper.action?pno={page}" pageLimit="9" showTotalPage="true" totalRecord="1988" showTotalRecord="true" /> </div> </body> </html>
还需要为它设置CSS样式:
/*---------------------pagination-----------------------------*/ div.pagination { padding:5px; margin:5px; text-align:center; float:left; font-size:12px; } div.pagination a { padding: 2px 5px 2px 5px; margin-right: 2px; border: 1px solid #ddd; text-decoration: none; color: #d8325d; } div.pagination a:hover, div.pagination a:active { border:1px solid #ddd; color: #fff; background-color: #d8325d; } div.pagination span.cur_page { padding: 2px 5px 2px 5px; margin-right: 2px; border: 1px solid #ddd; font-weight: bold; background-color: #d8325d; color: #FFF; } div.pagination span { padding: 2px 5px 2px 5px; margin-right: 2px; border: 1px solid #ddd; text-decoration: none; color: #d8325d; }
到此一切都OVER了.如果你觉得我的实现不能满足要求,完全可以自己再写一个pager.ftl.只要在使用标签时指定theme属性,比如说"text",然后再在theme/text目录下重新写一个pager.ftl就行了
评论
4 楼
tanzhengping11
2010-03-05
太难了,点啊,有没有简单点的啊.
3 楼
mysyche
2010-01-19
对于初学者,如何使用呀?
2 楼
holybless
2009-09-15
fsdgdsg
1 楼
holybless
2009-09-15
引用
[img][/img][url][/url]
相关推荐
本资源详细介绍了如何在Struts2中自定义分页标签,使得开发过程更加便捷。 在Struts2中,分页通常涉及到以下几个关键步骤: 1. **创建Action类**:首先,你需要创建一个Action类,该类将处理用户的请求,包括获取...
本教程将详细介绍如何在Struts2中自定义分页标签。 在传统的网页开发中,分页通常通过服务器端脚本或JavaScript实现,但在Struts2框架中,我们可以创建自定义标签来完成这一任务,使得代码更加模块化和易于维护。...
在这个基于Struts2的自定义分页标签的实践中,我们将深入探讨如何创建、配置和使用自定义标签来实现数据的分页展示,同时与Oracle数据库进行交互。 首先,理解分页的基本概念至关重要。分页是将大量数据分成小块,...
1. **配置Struts2分页标签**: 在Struts2的配置文件(struts.xml)中,需要声明这个自定义标签的namespace、action和result。同时,需要配置拦截器栈,确保分页相关的参数能够正确传递。 2. **编写自定义标签库**: ...
在探讨Struts2框架下的增删改查以及分页查询功能时,我们首先需要理解Struts2框架本身。Struts2是Apache软件基金会的一个开源Web应用框架,它继承了Struts1的一些特性,并在此基础上进行了大量的改进和扩展,提供了...
通过对`TagDemo`的分析和学习,你可以更好地理解和应用Struts2自定义标签实现分页功能。 总之,Struts2自定义标签提供了一种灵活的方式,使得开发者能够在JSP页面中方便地实现分页效果。通过自定义标签,我们可以将...
本文将详细介绍如何在Struts2中实现分页标签,并提供一个简洁易懂的项目示例。 1. **Struts2分页概念**: 分页是将大量数据分割成若干小块,每次只加载一部分数据到页面上,使得用户可以逐页浏览,减轻服务器压力...
下面是我用Struts2做的一个分页显示实例,基本的思路是:把数据库表中的每一行数据封装成一个对象,用一个返回类型为List的方法返回这些对象,接着在Struts2的action里面定义一个List属性,用这个List来接收从数据库...
例如,可以使用Struts2的DisplayTag库,它是一个强大的表格和分页标签库。在JSP中,我们可以这样写: ```jsp ${pageBean.pageSize}" export="false"> <!-- 显示数据列 --> ${pageBean.totalPages}" /> ``` ...
- 通过Struts2的标签库,如`s:iterator`遍历查询结果,以及`s:url`和`s:a`标签创建分页链接。 5. **Struts2配置**: - 需要在Struts2的配置文件(struts.xml)中定义Action,包括其结果类型和接收的参数。 - 还...
7. **JSP/Freemarker标签库**:在视图层,可以使用Struts2提供的`s:iterator`标签或自定义的分页标签来方便地遍历和展示数据,同时生成分页链接。 8. **URL参数**:为了支持用户点击分页链接,我们需要在URL中传递...
本实践项目旨在展示如何在Struts2中实现分页功能,适用于初学者学习和提升技能。 首先,我们来了解分页的基本原理。分页是将大量数据分成若干小部分,每次只加载一部分到页面上,用户可以通过导航按钮来浏览其他...
### Struts2 实现分页及 `<s:bean>` 标签详解 #### 一、Struts2 分页概述 在 Java Web 开发中,为了提高用户体验并减轻服务器负担,通常采用分页技术来展示数据。Struts2 框架提供了一套强大的工具和标签库来帮助...
在JSP页面中,你可以这样使用自定义分页标签: ```jsp <%@ taglib prefix="s" uri="/struts-tags" %> <!-- 显示数据 --> ${yourList}" var="item"> <!-- 表格内容 --> <!-- 分页 --> ${yourAction}" ...
根据提供的标题、描述、标签及部分内容,我们可以了解到这篇文章主要探讨的是如何在Struts2与Hibernate框架结合下实现分页功能。接下来将详细解析Struts2与Hibernate如何协作完成这一任务。 ### Struts2与Hibernate...
在JSP页面上,我们可以使用Struts2的标签库来显示分页链接。Struts2提供了`s:url`和`s:a`标签来生成URL并触发链接事件。例如: ```jsp <!-- 显示数据列表 --> ${dataList}"> <tr><td>${item.property}</td></tr...
Struts2分页技术是Java Web开发中一种常见的数据展示方式,它允许用户在大量数据中按需加载和浏览信息,提升用户体验。本教程将详细讲解如何在Struts2框架中实现分页功能,并结合MySQL数据库进行数据操作。 首先,...
本篇文章将深入探讨如何在Struts2框架下结合FreeMarker实现分页功能,帮助开发者更高效地处理大数据量的展示问题。 首先,了解分页的基本原理。分页是用来解决一次性加载大量数据导致页面加载过慢或内存压力过大的...
8. **页面展示**:最后,在JSP页面中,我们可以使用Struts 2的内置标签结合自定义分页标签来展示数据和分页控件。 总结一下,实现Struts 2 自定义标签分页需要对Struts 2框架有深入理解,包括标签库的创建、Java类...