当前位置:文档之家› Struts2自定义分页标签及用法

Struts2自定义分页标签及用法

Struts2自定义分页标签及用法
Struts2自定义分页标签及用法

最近在学习Struts2,并使用Struts2开发系统。在网上看了好多的struts2的分页,虽然都实现了分页的功能,但是感觉不是非常好,需要我们在每次写分页的时候做很多的工作,而我认为分页应该是一个通用的组件,开发人员在开发的过程中不应该在分页上花费太多的精力。所以,一直想封装一个比较通用的分页组件,而设计分页组件的时候,怎样保证动态查询的参数不丢失,成为实现的一个难点。感谢tangshuo和shim的分享,让我实现了这样的一个分页组件。

该组件采用自定struts2标签的方式实现。

首先建立一个构建分页标签信息的类:Pages.java

/**

*构建分页标签体的类

*@author Java软件工程师,专注于java领域新技术的研究和系统设计。

*@date2008-11-4下午02:52:19

*@version1.0

*/

publicclass Pages extends Component {

private HttpServletRequest request;

private String pageNo; //当前页码

private String total; //总页数

private String styleClass; //分页的样式

private String theme; //分页的主题

private String url; //action的路径

private String urlType; //路径的类型,主要用于URL重写的扩展

//省略get、set方法

public Pages(ValueStack arg0, HttpServletRequest request) {

super(arg0);

this.request = request;

}

@Override

publicboolean end(Writer writer,String body) {

boolean result = super.start(writer);

try {

//从ValueStack中取出数值

Object obj=this.getStack().findValue(pageNo);

pageNo = String.valueOf((Integer)obj);

obj=this.getStack().findValue(total);

total = String.valueOf((Integer)obj);

StringBuilder str = new StringBuilder();

Map cont= this.getStack().getContext();

StrutsRequestWrapper

req=(StrutsRequestWrapper)cont.get(StrutsStatics.HTTP_REQUEST);

if(url==null||"".equals(url)){

url=(String)req.getAttribute("javax.servlet.forward.request_uri");

}

String pageNoStr="?pageNo=";

if("dir".equals(urlType)){//当url的类型为目录类型时,比如

http://localhost:8090/yongtree/page/1

pageNoStr="";

if("1".equals(pageNo)){//第一页时

if(https://www.doczj.com/doc/f411002767.html,stIndexOf("/")!=url.length()-1){

if(https://www.doczj.com/doc/f411002767.html,stIndexOf("1")==url.length()-1){//如果有页码1,则去掉1

url=url.substring(0, url.length()-1);

}elseif(https://www.doczj.com/doc/f411002767.html,stIndexOf("/")!=url.length()-1){//如果没有页码1,并且最后不是'/'时,加上'/'

url=url+"/";

}

}

}else{

url=url.substring(0, https://www.doczj.com/doc/f411002767.html,stIndexOf("/")+1);

}

}

//下面这段处理主要是用来处理动态查询的参数,并拼接成url

StringBuffer perUrl=new StringBuffer("");

if ( this.getParameters().size() != 0 ) {

Iterator iter = this.getParameters().keySet().iterator();

while (iter.hasNext()) {

String key = (String) iter.next();

Object o = this.getParameters().get(key);

perUrl.append("&").append(key).append("=").append(o);

}

}

Integer cpageInt = Integer.valueOf(pageNo);

str.append("

if (styleClass != null) {

str.append(" class='"+styleClass+"'>");

} else {

str.append(">");

}

//文本样式

if (theme == null || "text".equals(theme)) {

//当前页与总页数相等

if (pageNo.equals(total)) {

//如果total = 1,则无需分页,显示“[第1页] [共1页]”

if ("1".equals(total)) {

str.append("[第" + pageNo + " 页]");

str.append(" [共" + total + " 页]");

} else {

//到达最后一页,显示“[首页] [上一页] [末页]”

str.append("[首页] ");

str.append("[上一页]" );

str.append(" [末页] ");

}

} else {

//当前页与总页数不相同

if ("1".equals(pageNo)) {

//第一页,显示“[首页] [下一页] [末页]”

str.append("[首页]");

str.append("[下一页]");

str.append("[末页]");

} else {

//不是第一页,显示“[首页] [上一页] [下一页] [末页]”

str.append("[首页]");

str.append("[上一页]");

str.append("[下一页]");

str.append("[末页]");

}

}

} elseif ("number".equals(theme)) { //数字样式[1 2 3 4 5 6 7 8 9 10 >>>]

Integer totalInt = Integer.valueOf(total);

//如果只有一页,则无需分页

str.append("[ ");

if (totalInt == 1) {

str.append("1 ");

} else {

if (cpageInt > 1) {

//当前不是第一组,要显示“<<<”

//<<:返回前一组第一页

//<:返回前一页

str.append("? ");

str.append("? " );

}else{

str.append("? ? " );

}

int v=(cpageInt-4)>0?(cpageInt-4):1;

int v1=(cpageInt+4)

if(v1==totalInt){

v=totalInt-10;

v=(v<=0?1:v); //如果为负数,则修改为1

}elseif(v==1&&v1

v1=totalInt>10?10:totalInt;

}

//10个为一组显示

for (int i = v; i <= v1; i++) {

if (cpageInt == i) { //当前页要加粗显示

str.append(""+i+" ");

}else{

//str.append("" + i + " ");

str.append("" + i + " ");

}

}

//如果多于1组并且不是最后一组,显示“>>>”

if (cpageInt

//>>:返回下一组最后一页

//>:返回下一页

str.append("? " );

str.append("? " );

}else{

str.append("? ? " );

}

}

str.append("]");

}

str.append("");

writer.write(str.toString());

} catch (IOException ex) {

ex.printStackTrace();

}

return result;

}

}

自定义分页标签结构的类:PageTag.java

/**

*自定义分页标签结构或属性

*@author Java软件工程师,专注于java领域新技术的研究和系统设计。

*@date2008-11-4下午03:00:40

*@version1.0

*/

publicclass PageTag extends ComponentTagSupport {

private String pageNo;

private String total;

private String styleClass;

private String theme;

private String url;

private String urlType;

publicvoid setUrlType(String urlType) {

this.urlType = urlType;

}

publicvoid setUrl(String url) {

this.url = url;

}

publicvoid setTheme(String theme) {

this.theme = theme;

}

publicvoid setStyleClass(String styleClass) {

this.styleClass = styleClass;

}

publicvoid setPageNo(String pageNo) {

this.pageNo = pageNo;

}

publicvoid setTotal(String total) {

this.total = total;

}

@Override

public Component getBean(ValueStack arg0, HttpServletRequest arg1, HttpServletResponse arg2) {

returnnew Pages(arg0, arg1);

}

protectedvoid populateParams() {

super.populateParams();

Pages pages = (Pages)component;

pages.setPageNo(pageNo);

pages.setTotal(total);

pages.setStyleClass(styleClass);

pages.setTheme(theme);

pages.setUrl(url);

pages.setUrlType(urlType);

}

}

创建自定义标签的tld文件:

1.0

1.2

yt

/yongtree-tags

"Java软件工程师,专注于java领域新技术的研究和系统设计。的自定义标签"

pages

com.baiyyy.polabs.tag.PageTag

jsp

分页标签

pageNo

false

true

total

false

true

styleClass

false

true

分页标签的样式,不配置此项将采用默认的样式

theme

false

true

分页的主题,现支持number|text两种主题

url

false

true

分页提交的路径,默认不用配置该项,自动获取系统访问路径。

urlType

false

true

url的类型,现在支持两种url类型,第一种默认的url,这种情况不需要设置;第二种情况是目录型的url,比如https://www.doczj.com/doc/f411002767.html,/yongtree,此种情况请配置成dir。此种情况不支持动态查询,故标签体中不能加入参数

这样一个分页标签就实现完了,下一步让我们看看该怎样使用吧。

在页面中引入自定义的标签库:

<%@ taglib prefix="yt" uri="/yongtree-tags"%>

开始配置分页标签信息:


页第

这样一个分页组件就完成了,但是只是完成了表现上的功能,我们还需要在后台进行封装,我对它进行了封装,做了一个PageAction.java

publicclass PageAction extends BaseAction {

private Integer pageNo=1;

private Integer everyPage=10;

private Integer total;

Page page=new Page();

public Integer getPageNo() {

return pageNo;

}

publicvoid setPageNo(Integer pageNo) {

this.page.setCurrentPage(pageNo);

this.pageNo = pageNo;

}

public Integer getEveryPage() {

return everyPage;

}

publicvoid setEveryPage(Integer everyPage) {

this.everyPage = everyPage;

}

public Page getPage() {

return page;

}

publicvoid setPage(Page page) {

this.page = page;

}

public Integer getTotal() {

returnthis.page.getTotalPage();

}

publicvoid setTotal(Integer total) {

this.total = total;

}

}

具体的相关实现可以参考https://www.doczj.com/doc/f411002767.html,/topic/14657

分页的实现步骤

为什么需要分页? 1.从客户角度来讲,数据内容过多,查看数据非常不便。 2.从服务器和网络的角度来讲,查这么多数据,传输这么多数据,是一种效率很低的做法。分页的核心SQL: 最简单最原始的分页: 分页的简单过程: 用户点击第一页传递一个参数:Num=1到后台,服务器获取num=1将该参数传到Dao 中,dao中:select * from tb_article where id>10 limit ?,?;, ps.setint((num-1)*10),返回一个List,传递到jsp中进行显示,发送给客户端。 1.

2.

3.访问:channel.jsp,然后点击在下面的页号导航即可看到简单的分页效果。 首页上一页1,2,3,4,5,6,7,8,9,10 下一页末页共101页 分页的实现原理: 1.获得需要显示的总的记录数rowCount—》从数据库中取 2.设定每页最多显示的记录数size—》10 3.指定显示的页码:num →作为参数得到 4.所要显示的数据对象→根据startRow和size从数据库中查出! 5.根据rowCount,size,num可计算出其余的元素: a)本页面从第几个记录开始:startRow = (this.num-1) * size; b)共有多少页:pageCount = (int) Math.ceil((double)rowCount/size); c)list:包含了所要显示的数据对象的集合 d)下一页:next=Math.min( this.pageCount, this.num+1) e)上一页:prev = Math.max(1 , this.num-1) f)页号控制元素: numCount:每页最多显示多少页号。(一共显示numCount+1个页号) start = Math.max(this.num-numCount/2, first); //本页显示页号从多少页开始 end = Math.min(start+numCount, last); //本页显示页号在多少页结束 页号控制: if(end-start < numCount){ //当本页总显示的页号数不够numCount时,如何计算起始页号。 start = Math.max(end-numCount, 1); } 分页实现步骤 Pagenation工具类代码:

自定义分页标签最新修改版

标签处理类: /** * ClassName: PagerTag.java * created on Oct 21, 2008 * Copyrights 2008 qjyong All rights reserved. * EMail: qjyong@https://www.doczj.com/doc/f411002767.html, */ package com.qiujy.tags; import java.io.IOException; import java.util.Enumeration; import javax.servlet.http.HttpServletRequest; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.TagSupport; /** * 自定义分页标签 * 使用方式 * * @author qiujy * */ public class PagerTag extends TagSupport { private int pageSize = 10; // 每页要显示的记录数private int pageNo = 1; // 页号 private int recordCount; // 总记录数 private String url; // 目的地URL public void setPageSize(int pageSize) { this.pageSize = pageSize; } public void setPageNo(int pageNo) { this.pageNo = pageNo; } public void setRecordCount(int recordCount) { this.recordCount = recordCount; }

ireport 分页

Ireport 分页介绍 功能介绍 基于ireport 3.7.6版本介绍ireport如何进行分页 开发步骤 1. 在ireport 报表中添加分页需要的变量 2. 设定首页,上一页,下一页,末页的超链接 3. 用jasper调用设定好的报表文件 开发示例 分页信息 当前显示1- 10条共32条第1页共4页首页上一页下一页末页 1、设置当前分页的显示信息 1.1. 设置当前显示1- 10条 步骤 1.1.1 拉一个text Field 右击点击edit expression 1.1.2 在Expression editor 框入输入 1.1.3 "当前显示"+($V{REPORT_COUNT}-$V{PAGE_COUNT}+1)+"- "+$V{REPORT_COUNT}+"条" ($V{REPORT_COUNT}-$V{PAGE_COUNT}+1) 是指当前正在处理的第几条记录数减去当前页显示的条数+1 就是当前页的起始记录数 注意点: text Field 的属性Evaluation Time 这里需要指定Column 1.1.4 点击Apply 步骤1.1.3用的的变量是ireport的内置变量 $V{PAGE_NUMBER} : 代表当前页数(可以是当前页码也可以是总页数,通过TextField的属性Evaluation Time决定的Now (得到的是当前页码)Report (得到的是总页数) $V{PAGE_COUNT} 当前页面中记录的数目 $V{REPORT_COUNT} 指示当前正在处理的是第几条记录

1.2设置共32条 步骤 1.2.1 拉一个text Field 右击点击edit expression 1.2.2 在Expression editor 框入输入"共"+$V{REPORT_COUNT}+"条" 注意:这里需要的是得到总条数所以text Field 的属性Evaluation Time 这里需要指定Report 1.2.3.点击Apply 1.3. 设置第1页 步骤 1.3.1 拉一个text Field 右击点击edit expression 1.3.2在Expression editor 框入输入"第"+$V{PAGE_NUMBER}+"页" 注意:所以text Field 的属性Evaluation Time 这里需要指定Now 1.3.3点击Apply 1.4. 设置共3页 步骤 1.4.1 拉一个 text Field 右击点击 edit expression 1.4.2 在Expression editor 框入输入 "共"+$V{PAGE_NUMBER}+"页" 注意:所以text Field 的属性Evaluation Time 这里需要指定Report 1.4.4.点击Apply 以上的变量仅供参与如有更好更简单的表达式可以补充。 2 设置分页信息转页(首页上一页下一页末页) 步骤 2.1 设置首页 2.1.1拉一个text Field 右击点击edit expression 2.1.2在Expression editor 框入输入“首页” 2.1.3 右击text Field 点击Hyperlink 将Hyperlink target 改为Self,Hyperlink Type 改为Reference 2.1.4 在Hyperlink Reference Expression框中输入"testpage.jsp?page=0" 2.1.5 点击close 其它设置的步骤一样只是在1.4步骤的输入的内容不一样以下是各项的内容 上一页“testpage.jsp?page="+($V{PAGE_NUMBER}-1) 下一页“testpage.jsp?page="+($V{PAGE_NUMBER}+1) 末页"testpage.jsp?page=lastPage" 上一页下一页不难理解就是当前页-1+1 这么简单 末页因为变量中无法得到最后页的页码(本人是无法得到)所以本人就想到以字符串lastPage 来标识是最后一页在调用jasper代码中去做处理(如果你有更好的方式请补充) 实例代码:工程中代码path:/drivingMonitor/web/view/situation/llsdi.jsp 下面的代码是jsp 中的java代码以上加红部分为处理分页的代码 <%@page language="java"import="java.util.*" pageEncoding="utf-8"%> <%@page import="java.util.*"%>

常见标签使用

1.数据源:{PE.DataSource id="cone" datasource="文章_内容页" itemId="@RequestInt_id" xslt="true" /} 字段引用:{PE.Field id="cone" fieldname="Keyword" /} 2.{https://www.doczj.com/doc/f411002767.html,bel id="通用信息列表" bindStyle="普通式" titleLength="29" outputQty="10" models="1" nodeId="{PE.Field id="cone" fieldname="NodeID" /}" /} 参考:{https://www.doczj.com/doc/f411002767.html,bel id="通用信息列表" bindStyle="普通式" usePage="false" outputQty="10" titleLength="50" nodes="0" includeChildNodes="true" models="0" bindModel="0" specials="0" items="0" itemListOrderType="1" linkOpenType="0" inDays="" betDate="" editor="" inputer="" hits="" dayHits="" weekHits="" monthHits="" eliteLevel="" priorityLevel="" picExist="false" disableVirtualLink="false" displayPropertyPrefix="0" displayDateTime="" displayNewSign="" displayTitlePrefix="false" displayHits="false" displayTips="false" displayEditor="false" displayInputer="false" displayNodeName="false" displayHotSign="false" displayCommentLink="false" listOrderByNodeSet="false" pageSizeByNodeSet="false" optionalCond="" optionalExtend="" /} 字段明细: 属性参数类 型 默认 值 可用值 变 量 值 参数说明 bindStyle string 普通 式 自定义值- 项目呈现样式 usePage bool false t rue false - 是否分页显示 outputQty int 10 自定义值- 输出的项目数量,如果开启分页,则此参数为分页大小值 titleLength int 50 自定义值- 项目标题长度,一个汉字占两个字节 nodes supersql 0 自定义值- 栏目ID includeChildNodes bool true true|false - 是否包含子栏目models string 0 自定义值- 模型ID bindModel int 0 自定义值- 通过模型ID与指定的模型表联合 specials string 0 自定义值- 专题ID items string 0 自定义值- 项目ID itemListOrderType int 1 自定义值- 项目列表排序方式 linkOpenType int 0 自定义值- 内容链接的打开方式{栏目节点配置取代:2,新窗口:1,原窗口:0} inDays int 无自定义值- 近多少天的项目 betDate string 无自定义值- 介于时间段之间的项目 editor string 无自定义值- 为指定编辑者的项目

分页的实现原理,分页的实现步骤

分页的实现原理: 1.获得需要显示的总的记录数rowCount—》从数据库中取 2.设定每页最多显示的记录数size—》10 3.指定显示的页码:num 作为参数得到 4.根据rowCount,size,num可计算出其余的元素: a)本页面从多少行记录开始:startRow = (this.num-1) * size ; b)共有多少页:pageCount = (int) Math.ceil((double)rowCount/size); c)下一页:next=Math.min( this.pageCount, this.num+1) d)上一页:prev = Math.max(1 , this.num-1) e)页号控制元素: numCount:每页最多显示多少页号。(一共显示numCount+1个页号) start = Math.max(this.num-numCount/2, first); //本页显示页号从多少页开始 end = Math.min(start+numCount, last); //本页显示页号在多少页结束 页号控制: if(end-start < numCount){ //当本页总显示的页号数不够numCount时,如何计算起始页号。 start = Math.max(end-numCount, 1); } 分页实现步骤: 1.将Page类引入。需要自己修改的可自行修改。 package com.puckasoft.video.util; public class Page { private int num; //当前页号, 采用自然数计数 1,2,3,... private int size; //页面大小:一个页面显示多少个数据 private int rowCount;//数据总数:一共有多少个数据 private int pageCount; // 页面总数 private int startRow;//当前页面开始行, 第一行是0行 private int first = 1;//第一页页号 private int last;//最后页页号 private int next;//下一页页号 private int prev;//前页页号 private int start;//页号式导航, 起始页号 private int end;//页号式导航, 结束页号 private int numCount = 10;//页号式导航, 最多显示页号数量为numCount+1;这里显示11页。 public Page(int size, String str_num, int rowCount) { int num = 1; if (str_num != null) { num = Integer.parseInt(str_num);

icms标签

站点标签: 适用范围:所有模板页 站点名称 站点附加标题 站点关键字 站点描述 站点域名例:https://www.doczj.com/doc/f411002767.html, 站点网址例:https://www.doczj.com/doc/f411002767.html, 系统所在目录例:/ 根目录或者 /icms 公共程序public目录地址(注:只适用5.0版本) 站点首页名注:5.0版本已经移除 模板路径例:/templates 模板路径 {系统所在目录}/templates/{所选模板目录} 例:/templates/default 模板经对路径 例:https://www.doczj.com/doc/f411002767.html,/templates/default 站长信箱 ICP备案号 输出所有属性 栏目标签: 适用范围:频道页模板{channel.htm},栏目列表模板{list.htm},独立页模板{page.htm},内容页模板{show.htm} 栏目ID 栏目名称 栏目链接 栏目链接(带栏目名) 栏目关键字 栏目简介 栏目位置 输出所有属性 文章标签: 适用范围:内容页模板 {show.htm}

文章ID 文章缩略图 文章链接 文章标题 文章短标题 文章副标题 文章链接,带标题{ 文章标题 } 文章关键字 文章简介 文章出处 文章作者 文章编辑 文章发布日期 文章正文 正文总页数 正文当前页数 分页HTML 正文总页数 正文当前页数 分页HTML 文章点击数 文章digg数 文章评论数 文章标签 文章标签带链接 文章标签数组 上一篇文章 下一篇文章 文章发布者ID 文章发布者类型0用户 输出所有属性 模型内容标签: 适用范围:内容页模板 {content.show.htm} 内容ID 模型ID 内容链接 内容标题

Dreamweaver中实现分页的代码

<% dim m,n set rs=server.CreateObject("adodb.recordset") sqlstr="select * from message order by time desc" rs.open sqlstr,conn,3,3 rs.pagesize=10 '定义一页显示的记录数目 tatalrecord=rs.recordcount '获取记录总数目 tatalpages=rs.pagecount '获取分页的数目 rs.movefirst ---------------------------- nowpage=request("page") '用request获取当前页数,注意page是自己定义的变量并非函数-------------------------- if nowpage&"x"="x" then '处理页码为空时的情况 nowpage=1 else nowpage=cint(nowpage) '将页码转换成数字型 end if -------------------------------- rs.absolutepage=nowpage '将指针移动到当前显示页的第一条记录 ------------------------------- %> --------------------------------------------- <% n=1 while not rs.eof and n<=rs.pagesize response.Write(rs("user") & "
") response.Write(rs("tt") & "
") n=n+1 rs.movenext '显示页面的数据 wend %> ------------------------------------------- 共:<%=tatalpages%>页当前为:<%=nowpage%>页 <%if nowpage>1 then%> 上一页 <%else%> 上一页 <%end if%> <%for k=1 to tatalpages%> <%if k<>nowpage then %> <%=k%> <%else%> <%=k%>

常用标签参数使用

一、多级导航标签的使用(导航条) {https://www.doczj.com/doc/f411002767.html,bel id="多级导航菜单" nodeId="0" depth="2" outputQty="10" /} 常用参数详细说明 Nodeid=”读取哪些节点下面的栏目节点,如果是首页可以用0 来填充” Depth=”这项参数是控制多级导航菜单显示多少级,要配合设计样式同时使用,目前大多数标准版都是定义为显示2级” 附图:如果不需要显示二级栏目,则可以把参数值设为1 OutputQty=”显示多少个数量,因为版面宽度是固定值,当我们栏目比较多的时候,需要使用这个参数来控制条数,保持页面的整洁” 其他,1、在我们使用多级导航菜单的时候,还有出现有栏目显示顺序调整的时候,可以通过后台系统设置》节点管理》节点排序还调整节点顺序,以达到在前台页面中的顺序调整附图: 2、比如有些栏目不想显示在一级导航栏上,可以通过后台系统设置》节点管理》前台样式》第一项选择否,这样我们就可以让改栏目节点不在导航条上显示。

二、内容带图片的信息列表_焦点图带内容-Slide(焦点图) {https://www.doczj.com/doc/f411002767.html,bel id="内容带图片的信息列表" bindStyle="焦点图带内容-Slide" titleLength="40" contentLength="0"outputQty="5"nodes="@RequestInt_id"ListOrderType="20" imageWidth="280" imageHeight="200" /}常用参数详细说明 bindStyle=”此项的值为样式类”我们在使用标签是把下划线后面的文字写在此参数内,如果没有bindStyle=””参数则默认为bindStyle=”普通式”,其他标签也是同理。 下面是错误写法; TitleLength=”带图片的文章标题字符数的长度,每个汉字占2个字符。控制标题文字不溢出或太短” contentLength="显示一部分文章的内容简介" 如果不需要显示内容,需要把参数中设置为0; imageWidth="160" imageHeight="120" 这2个参数是控制图片的宽度和高度,可以css 共同控制。如果懂css 可以根据自身需要做适当大小调整。 OutputQty=”同上,控制显示的数目” ListOrderType=”图片的排序规则” 附参数值:

cadence 按分页编号

Cadence按照分页进行元器件编号 如果没有分裂元件直接按照分组来做就可以了(已在16.5版本验证,测试通过),注意红色框的地方,如果没有分裂元件第3,5个框不用管(从上往下数,备注:16.5无第五个框),如果有分裂元件,则编号后手动改一下即可。 2. 如果有分裂元件则上面的步骤会提示出错 ERROR(ORCAP-1376): Cannot perform annotation of heterogeneous part 'U?A(Value MCP6004) at location (4.00, 5.30) on page alternating_current_filter', part has not been uniquely grouped (using a common User Property with differing Values) or the device designation has not been chosen INFO(ORCAP-1379): Done updating part references 这种情况下需要给元件添加一个额外的属性来让cadence知道哪几个分裂元件是同一个器件 打开这个分裂元件的库文件,双击器件出现下面的对话框,然后点“new”新建一个package,值填1即可

3. 在原理图里设置package 把属于一个器件上的分裂器件的部分设置成同样的标号,同时注意上面第一步里的第3,5个红框也要修改,第三个红框是刚才加的这个属性:package,第五个框勾选就可以了 现在应该可以正确的按页编号显示标号了

Java分页查询操作的两种实现办法

Dao实现类 public Listpage(int start, int end) { String pagesql = "select * from (select id,name,price,descri,rownumrn from t_product)where rn between ? and ?"; List list = new ArrayList(); Product p = null; Connection conn = null; PreparedStatementstm = null; ResultSetrs = null; try { conn = JDBCUtil.getConnection(); stm = conn.prepareStatement(pagesql); stm.setInt(1, start); stm.setInt(2, end); rs = stm.executeQuery(); while (rs.next()) { p = new Product(rs.getInt(1), rs.getString(2), rs.getDouble(3), rs.getString(4)); list.add(p); } } catch (Exception e) { thrownew RuntimeException("查询page全部异常", e); } finally { JDBCUtil.close(rs, stm, null); } return list; } public Long count() { Connection conn = null; PreparedStatementstm = null; ResultSetrs = null; Long count = null; try { conn = JDBCUtil.getConnection(); stm = conn.prepareStatement("select count(*) from t_product"); rs = stm.executeQuery(); while (rs.next()) { count = rs.getLong(1); } } catch (Exception e) { thrownew RuntimeException("查询count", e); } finally { JDBCUtil.close(rs, stm, null); } return count; } Service实现类

Display标签使用

DisplayTag是一个非常好用的表格显示标签,适合MVC模式,其主页在 https://www.doczj.com/doc/f411002767.html, 一、最简单的情况,未使用标签 <%request.setAttribute( "test", new ReportList(6) );%> 标签遍历List里的每一个对象,并将对象里的所有属性显示出来。一般用于开发的时候检查对象数据的完整性。 二、使用标签的情况 property对应List里对象的属性(用getXXX()方法取得),title则对应表格表头里的列名。定义列有两种方式: A、 使用标签里的property属性来定义 B、email@https://www.doczj.com/doc/f411002767.html,标签体里增加内容,可以是常量,也可以用其他标签等等 两种方式比较,用property属性来定义更加快速和利于排序。 三、表格显示样式的定义 A、在标签里指定标准的html属性,烦琐 B、修改样式表

AI的分页功能

AI的分页功能 对矢量制图软件有所了解的朋友,一定知道Illustrator没有类似coredraw ,pagemaker 等排版软件界面下方状态栏处的分页栏(如图一),但这不代表Illustrator无法制作分页哦! 相反illustrator制作印刷拼版非常舒服,还不知道此功能的朋友,不妨跟着Relen一起看看吧! 图一 Adobe Illustrator从早期版本就已经设置了页面工具(page tool),当我们选择它在页面上挪动时会产生如图二、图三的情况。

图二 图三 Tip:页面拼帖工具没有快捷键。先按[H]键转换为小手工具后,按住【Alt】+ 鼠 标点击工具栏的小手工具,可以在和工具间进行转换。 通常我们做图时,可以完全不考虑画板区域以及页面拼贴区域。选择菜单:视图>隐藏画板,可以隐藏画板线,选择视图>隐藏页面拼贴,可以隐藏页面拼贴的虚线。(图四) 图四

下面我们来看看页面拼贴工具到底能为我们做些什么? 选择菜单:文件>文挡设置或【Ctrl+Alt+ P】打开文挡设置面版(图五)。 图五 如图五依次点选以下步骤: ①选择自定义画板区域大小。 ②填写“四开”尺寸44cm×59cm;同时定义方向为竖向。 ③点选“拼贴完整页面”。 将出现图六页面情况,缩小视图到35%显示,我们可以看到四个页面区域,同时可以看到每个页面拼版左下角的页数字符。 注意: 1、如果你的工作区没有出现图六情况,请查看你的拼贴虚线位置是否在画板的边缘。不是的,选择拼贴工具挪动拼贴虚线,移动到画板边缘,如图六。 2、如果还是没有出现图六情况,请打开文挡设置面版【Ctrl+Alt+ P】(图九),选择letter(信纸)选项。因为画板的尺寸必须满足四个版的尺寸才能正确显示。

pagertaglib分页处理的使用

pager-taglib是java中一个用于分页的小的框架。下面简单介绍一下它的具体使用。 一、环境的搭建: 将pager-taglib-2.0.war包拷贝到Tomcat的webapps下。启动Tomcat后会将其解压成pager-taglib-2.0文件夹。 从解压文件中的lib目录下拷贝pager-taglib.jar包到项目的lib下。 在JSP页面中使用taglib指令引入pager-taglib标签库。 二、重要参数的说明: Offset:传过来的值是偏移量,是选择的页面的页数。比如你的记录/页pageSize=3,那么传过来的offset应该如下处理:offset/3+1 这样得到的就是要生成的页数! pg:pager设置分页的总体参数 url:分页的链接根地址,pager标签会在这个链接的基础上附加分页参数,但不允许像给页面跳转的url那样,在后面直接添加参数,而参数的传递时需要使用pg:param来指定。 items:总记录数,pager标签正是根据这个值来计算分页参数,很重要。 maxPageItems:每页显示的行数,默认为10 maxIndexPages:在循环输出页码的时候,最大输出多少个页码,默认是10 pg:first 第一页的标签 pg:pre 上一页标签

pg:next 下一页标签 pg:last 最后一页标签 pg:pages 循环输出页码信息 对于上面的标签都有类似的export变量: pageUrl - 分页链接URL地址(最重要的export参数) pageNumber- 页码 firstItem –对应页第一行的索引值 lastItem -对应页最后一行的索引值 三、项目中使用pager-taglib: 1、引入对应的标签库: [html]view plaincopy 1.<%@taglibprefix="pg"uri="https://www.doczj.com/doc/f411002767.html,/ta gs/navigation/pager"%> 2. 3.<%@ taglib prefix="c"uri="https://www.doczj.com/doc/f411002767.html,/jsp/jstl/core" %> 2、使用标签布置页面: [html]view plaincopy 1. 2. 3. 4. 5. 6. 7.首页 8. 9.

怎样使用分页符

怎样使用分页符论文还不会编页码的童鞋看过来啦~来源:张昀的日志 在写论文时,论文格式要求目录需要用“Ⅰ、Ⅱ、Ⅲ、…”作为页码,正文要用“1、2、3、…”作为页码。而有的用户此时就要将目录存为一个单独的文件,再设置不同的页码格式,最后分开打印并装订成册。但是,如果书的前面还有扉页、前言等,这样的页一般不需设置页码。如果再把它们都分为不同的文件,管理起来就不太方便了,特别是在批量打印时就非常被动。合理正确的使用Word中的分隔符,可以帮你轻松解决这个问题。 一、插入分页符 当文本或图形等内容填满一页时,Word会插入一个自动分页符并开始新的一页。如果要在某个特定位置强制分页,可插入“手动”分页符,这样可以确保章节标题总在新的一页开始。首先,将插入点置于要插入分页符的位置,然后下面的任何一种方法都可以插入“手动”分页符: 1.按Ctrl+Enter组合键。 2.执行“插入”→“分隔符”,打开“分隔符”对话框,单击“分页符”,确定。 二、插入分栏符 对文档(或某些段落)进行分栏后,Word文档会在适当的位置自动分栏,若希望某一内容出现在下栏的顶部,则可用插入分栏符的方法实现,具体步骤为(为呈现效果,特先将被操作段落分为两栏): 1.在页面视图中,将插入点置于另起新栏的位置。 2.执行“插入”→“分隔符”,打开“分隔符”对话框。 3.在“分隔符”框中选择“分栏符”项,单击“确定”按钮。 三、插入换行符 通常情况下,文本到达文档页面右边距时,Word自动将换行。在“分隔符”对话框中选择“换行符”,单击“确定”(或直接按Shift+Enter组合键),在插入点位置可强制断行(换行符显示为灰色“↓”形)与直接按回车键不同,这种方法产生的新行仍将作为当前段的一部分。 四、插入分节符 节是文档的一部分。插入分节符之前,Word将整篇文档视为一节。在需要改变行号、分栏数或页面页脚、页边距等特性时,需要创建新的节。插入分节符步骤如下: 1.将插入点定位到新节的开始位置。 2.执行“插入”→“分隔符”,打开“分隔符”对话框。 3.在“分节符类型”中,选择下面的一种。 下一页:选择此项,光标当前位置后的全部内容将移到下一页面上。 连续:选择此项,Word将在插入点位置添加一个分节符,新节从当前页开始。 偶数页:光标当前位置后的内容将转至下一个偶数页上,Word自动在偶数页之间空出一页。 奇数页:光标当前位置后的内容将转至下一个奇数页上,Word自动在奇数页之间空出一页。 4.单击“确定”按钮。

如何才能做到将数据库的查询结果分页显示呢

那么究竟如何才能做到将数据库的查询结果分页显示呢?其实方法有很多,但主要有两种: 一、将数据库中所有符合查询条件的记录一次性的都读入recordset 中,存放在内存中,然后通过ADO Recordset 对象所提供的几个专门支持分页处理的属性:PageSize( 页大小)、PageCount( 页数目) 以及 AbsolutePage( 绝对页) 来管理分页处理。 二、根据客户的指示,每次分别从符合查询条件的记录中将规定数目的记录数读取出来并显示。两者的主要差别在于前者是一次性将所有记录都读入内存然后再根据指示来依次做判断分析从而达到分页显示的效果,而后者是先根据指示做出判断并将规定数目的符合查询条件的记录读入内存,从而直接达到分页显示的功能。 我们可以很明显的感觉到,当数据库中的记录数达到上万或更多时,第一种方法的执行效率将明显低于第二种方法,因为当每一个客户查询页面时都要将所有符合条件的记录存放在服务器内存中,然后在进行分页等处理,如果同时有超过100 个的客户在线查询,那么ASP 应用程序的执行效率将大受影响。但是,当服务器上数据库的记录数以及同时在线的人数并不是很多时,两者在执行效率上是相差无几的,此时一般就采用第一种方法,因为第一种方法的ASP 程序编写相对第二种方法要简单明了得多。 在这里作者就以我们常见的ASP BBS 程序为例,来给大家分析一下如何在BBS 程序里实现分页显示功能,由于我们一般使用的BBS 程序的数据库记录数和同时访问的人数都不会太多,所以以下程序实例是使用的先前所介绍的第一种分页显示方法。 进行ADO 存取数据库时的分页显示,其实就是对Recordset 的记录进行操作。所以我们首先必须了解Reordset 对象的属性和方法: BOF 属性:目前指标指到RecordSet 的第一笔。 EOF 属性:目前指标指到RecordSet 的最后一笔。 Move 方法:移动指标到RecordSet 中的某一条记录。 AbsolutePage 属性:设定当前记录的位置是位于哪一页 AbsolutePosition 属性:目前指标在RecordSet 中的位置。 PageCount 属性:显示Recordset 对象包括多少“页”的数据。 PageSize 属性:显示Recordset 对象每一页显示的记录数。 RecordCount 属性:显示Recordset 对象记录的总数。 下面让我们来详细认识一下这些重要的属性和方法 一、BOF 与EOF 属性 通常我们在ASP 程序中编写代码来检验BOF 与EOF 属性,从而得知目前指标所指向的RecordSet 的位置,使用BOF 与EOF 属性,可以得知一个Recordset 对象是否包含有记录或者得知移动记录行是否已经超出该ecordset 对象的范围。 如:< % if not rs.eof then ... %> < % if not (rs.bof and rs.eof) %> 若当前记录的位置是在一个Recordset 对象第一行记录之前时,BOF属性返回true,反之则返回false。若当前记录的位置是在一个Recordset 对象最后一行记录之后时,EOF 属性返回true,反之则返回false。BOF 与EOF 都为False:表示指标位于RecordSet 的当中。BOF 为True:目前指标指到RecordSet

dedecms中tags标签分页错误造成的无限空间,解决办法

看到论坛里有人提到dedecms的tags标签中的问题, 这里开个帖子,讲下解决办法吧。 借原图一用 从图中可以看出,tags.php/seo/ 存在着大量的负数的链接 这是因为dedecms tags分页中上一页的判断错误造成的,dedecms的tags默 认是每页有10个链接,当某个tag链接数大于10时,就会分页 dedecms tags分页获得上一页,下一页的判断语句是这样的 //获得上一页和下一页的链接 if($this->PageNo != 1) { $prepage.="

  • 上一页
  • \r\n"; $indexpage="
  • 首页
  • \r\n"; } 这句是说,如果当前页面tags 分页页码不等于1,那么就有上一页

    于是当页面在tags.php?/seo/0/这个页面,分页就成了这样

  • 0