转 也显示一下我的Struts2分页struts2分页

转自http://zhangjunji111.iteye.com/blog/582899
最近看见网上有不少基于Struts2+spring分页的东西,自己感觉都不是很适合,许多都只是对一个列表进行了分页,而没有考虑到查询条件等。个人认为,分页就是从前台把查询条件输入进去然后返回查询结果列表。这个问题的难点就是查询条件的传递,因为第一次查询时候需要输入查询条件,而以后点下一页时候,就不需要再次输入查询条件了。所以,第一次查询时候,需要把查询条件保存到某个地方,再次查询时候,把条件取出来,同时,这些要做的通用,等有许多查询页面时候,能最大限度的重用代码,好了,废话少说,下面展示我的分页代码

首先写一个Pages类,用来保存分页的一些信息,包括当前页码、记录总数、总页数、每页显示的记录数、查询条件等。代码如下:

Java代码
public class Pages {
private int pageNo = 1; // 当前页码

private int totalNum = -1;// 记录总数

private int totalPage = -1; // 总页数

int perPageNum = 10; // 每页显示记录数

private String queryParames;// 查询条件

public String getQueryParames() {
return queryParames;
}

public void setQueryParames(String queryParames) {
this.queryParames = queryParames;
}

public Pages() {
}

public Pages(int pageNo, int totalNum, int perPageNum) {
this.pageNo = pageNo;
this.totalNum = totalNum;
this.perPageNum = perPageNum;
this.executeCount();
}

public void executeCount() {
this.totalPage = (int) Math.ceil((this.totalNum + this.perPageNum - 1)
/ this.perPageNum);
if (this.totalPage <= 0) {
this.totalPage = 1;
}
int intPage = this.pageNo;
if (intPage > this.totalPage) {
this.pageNo = this.totalPage;
} else {
this.pageNo = intPage;
}
}

public int getPageNo() {
return pageNo;
}

public void setPageNo(int pageNo) {
this.pageNo = pageNo;
}

public int getPerPageNum() {
return perPageNum;
}

public void setPerPageNum(int perPageNum) {
this.perPageNum = perPageNum;
}

public int getTotalNum() {
return totalNum;
}

public void setTotalNum(int totalNum) {
this.totalNum = totalNum;
}

public int getTotalPage() {
return totalPage;
}

public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}

public Map transQueryCondition() {
Map<String, String> map = new HashMap<String, String>();
if (StringUtils.isNull(queryParames)) {
return map;
}
String[] condtions = queryParames.split(";");
for (int i = 0; i < condtions.length; i++) {
if (StringUtils.isNull(condtions[i])) {
continue;
}
map.put(condtions[i].split(",")[0], condtions[i].split(",")[1]);
}
return map;
}

public class Pages {
private int pageNo = 1; // 当前页码

private int totalNum = -1;// 记录总数

private int totalPage = -1; // 总页数

int perPageNum = 10; // 每页显示记录数

private String queryParames;// 查询条件

public String getQueryParames() {
return queryParames;
}

public void setQueryParames(String queryParames) {
this.queryParames = queryParames;
}

public Pages() {
}

public Pages(int pageNo, int totalNum, int perPageNum) {
this.pageNo = pageNo;
this.totalNum = totalNum;
this.perPageNum = perPageNum;
this.executeCount();
}

public void executeCount() {
this.totalPage = (int) Math.ceil((this.totalNum + this.perPageNum - 1)
/ this.perPageNum);
if (this.totalPage <= 0) {
this.totalPage = 1;
}
int intPage = this.pageNo;
if (intPage > this.totalPage) {
this.pageNo = this.totalPage;
} else {
this.pageNo = intPage;
}
}

public int getPageNo() {
return pageNo;
}

public void setPageNo(int pageNo) {
this.pageNo = pageNo;
}

public int getPerPageNum() {
return perPageNum;
}

public void setPerPageNum(int perPageNum) {
this.perPageNum = perPageNum;
}

public int getTotalNum() {
return totalNum;
}

public void setTotalNum(int totalNum) {
this.totalNum = totalNum;
}

public int getTotalPage() {
return totalPage;
}

public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}

public Map transQueryCondition() {
Map<String, String> map = new HashMap<String, String>();
if (StringUtils.isNull(queryParames)) {
return map;
}
String[] condtions = queryParames.split(";");
for (int i = 0; i < condtions.length; i++) {
if (StringUtils.isNull(condtions[i])) {
continue;
}
map.put(condtions[i].split(",")[0], condtions[i].split(",")[1]);
}
return map;
} 下面写一个通用的Action类,用来初始化查询参数:

Java代码
public abstract class ListAction extends ActionSupport {
protected static final String LIST = "list";

Logger logger = Logger.getLogger(ListAction.class);

/*
* 当前页
*/
private int pageNo = 1;

/*
* 总页数
*/
private int totalPage = -1;

/*
* 总记录数
*/
private int totalNum = -1;

/*
* 查询参数
*/
private String queryParames;

private PageList pageList;

public final String execute() {
initQuerycondition();
Pages pages = new Pages();
pages.setPageNo(this.getPageNo());
pages.setPerPageNum(10);
pages.setTotalNum(totalNum);
pages.executeCount();
this.setTotalPage(pages.getTotalPage());
pages.setQueryParames(queryParames);
queryPageList(pages);
this.setTotalPage(pages.getTotalPage());
this.setTotalNum(pages.getTotalNum());
return LIST;
}

/**
* 实现每个查询结果列表,依据查询结果的不同而不同
* @param pages
*/
protected abstract void queryPageList(Pages pages);

/**
* 初始化查询参数的配置
*/
protected void initQuerycondition() {
/*
*如果不是第一次查询,直接返回,否则设置查询参数,拼装成 queryParames
*/
if (totalNum >= 0) {
return;
}
Map map = ActionContext.getContext().getParameters();
Iterator iter = map.keySet().iterator();
StringBuffer query = new StringBuffer();
while (iter.hasNext()) {
String key = (String) iter.next();
Object keyValue = ((Object[]) map.get(key))[0];
String value = "";
if (!StringUtils.isObjNull(keyValue)) {
query.append(";").append(key);
if (keyValue instanceof Date) {
value = DateUtils.trunsDateToString((Date) keyValue);
} else {
value = String.valueOf(keyValue);
}
query.append(",").append(value);
}
}
this.setQueryParames(query.toString());
}

//get.....set...方法
}

public abstract class ListAction extends ActionSupport {
protected static final String LIST = "list";

Logger logger = Logger.getLogger(ListAction.class);

/*
* 当前页
*/
private int pageNo = 1;

/*
* 总页数
*/
private int totalPage = -1;

/*
* 总记录数
*/
private int totalNum = -1;

/*
* 查询参数
*/
private String queryParames;

private PageList pageList;

public final String execute() {
initQuerycondition();
Pages pages = new Pages();
pages.setPageNo(this.getPageNo());
pages.setPerPageNum(10);
pages.setTotalNum(totalNum);
pages.executeCount();
this.setTotalPage(pages.getTotalPage());
pages.setQueryParames(queryParames);
queryPageList(pages);
this.setTotalPage(pages.getTotalPage());
this.setTotalNum(pages.getTotalNum());
return LIST;
}

/**
* 实现每个查询结果列表,依据查询结果的不同而不同
* @param pages
*/
protected abstract void queryPageList(Pages pages);

/**
* 初始化查询参数的配置
*/
protected void initQuerycondition() {
/*
*如果不是第一次查询,直接返回,否则设置查询参数,拼装成 queryParames
*/
if (totalNum >= 0) {
return;
}
Map map = ActionContext.getContext().getParameters();
Iterator iter = map.keySet().iterator();
StringBuffer query = new StringBuffer();
while (iter.hasNext()) {
String key = (String) iter.next();
Object keyValue = ((Object[]) map.get(key))[0];
String value = "";
if (!StringUtils.isObjNull(keyValue)) {
query.append(";").append(key);
if (keyValue instanceof Date) {
value = DateUtils.trunsDateToString((Date) keyValue);
} else {
value = String.valueOf(keyValue);
}
query.append(",").append(value);
}
}
this.setQueryParames(query.toString());
}

//get.....set...方法
}再写一个Page类,继承Component,用来获取ValueStack中的参数值。

Java代码
public class Page extends Component {
private static final Log logger = LogFactory.getLog(Page.class);
public Page(ValueStack stack) {
super(stack);
}

private String pageNo; // 当前页码

private String totalPage; // 总页数

private String totalNum; // 总记录数

private String styleClass; // 分页的样式

private String theme; // 分页的主题

private String url; // action的路径

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

private String queryParames;

public String getQueryParames() {
return queryParames;
}

public void setQueryParames(String queryParames) {
this.queryParames = queryParames;
}

public boolean start(Writer writer) {
boolean result = super.start(writer);

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

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

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

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

obj = this.getStack().findValue(totalNum);
totalNum = 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 pageStr = "?totalNum=" + totalNum + "&pageNo=";

if ("dir".equals(urlType)) {
pageStr = "";

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

if (url.lastIndexOf("/") != url.length() - 1) {

if (url.lastIndexOf("1") == url.length() - 1) {// 如果有页码1,则去掉1

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

} else if (url.lastIndexOf("/") != url.length() - 1) {// 如果没有页码1,并且最后不是'/'时,加上'/'

url = url + "/";

}

}

} else {

url = url.substring(0, url.lastIndexOf("/") + 1);

}

}


// 下面这段处理主要是用来处理动态查询的参数,并拼接成url
StringBuffer perUrl = new StringBuffer("");
obj = this.getStack().findValue(queryParames);
if (!StringUtils.isObjNull(obj)) {
perUrl.append("&").append("queryParames").append("=").append(
StringUtils.decode((String) obj));
}

//当前页
Integer cpageInt = Integer.valueOf(pageNo);
str.append("<span> ");
// 文本样式
if (theme == null || "text".equals(theme)) {
// 当前页与总页数相等
if (pageNo.equals(totalPage)) {
// 如果total = 1,则无需分页,显示“[第1页] [共1页]”
if ("1".equals(totalPage)) {
str.append("[第 " + pageNo + " 页]");

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

} else {

// 到达最后一页,显示“[首页] [上一页] [末页]”
str.append("<a href='" + url + pageStr + "1" + perUrl
+ "'>[首 页]</a> ");

str.append("<a href='" + url + pageStr + (cpageInt - 1)
+ perUrl + "'>[上一页]</a>");

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

str.append(" <a href='" + url + pageStr + totalPage
+ perUrl + "'>[末 页]</a> ");

}

} else {

// 当前页与总页数不相同
if ("1".equals(pageNo)) {

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

str.append("<a href='" + url + pageStr + "1" + perUrl
+ "'>[首 页]</a>");
str.append("[上一页]");
str.append("<a href='" + url + pageStr + (cpageInt + 1)
+ perUrl + "'>[下一页]</a>");
str.append("<a href='" + url + pageStr + totalPage + perUrl
+ "'>[末 页]</a>");

} else {

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

str.append("<a href='" + url + pageStr + "1" + perUrl
+ "'>[首 页]</a>");

str.append("<a href='" + url + pageStr + (cpageInt - 1)
+ perUrl + "'>[上一页]</a>");

str.append("<a href='" + url + pageStr + (cpageInt + 1)
+ perUrl + "'>[下一页]</a>");

str.append("<a href='" + url + pageStr + totalPage + perUrl
+ "'>[末 页]</a>");

}

}

} else if ("number".equals(theme)) { // 数字样式 [1 2 3 4 5 6 7 8 9 10 > // >>]
Integer totalInt = Integer.valueOf(totalPage);
// 如果只有一页,则无需分页
str.append("[ ");
if (totalInt == 1) {
str.append("<strong>1</strong> ");
} else {
//当前页
if (cpageInt > 1) {
// 当前不是第一组,要显示“<< <”
// <<:返回前一组第一页
// <:返回前一页
str.append("<a href='" + url + pageStr + "1" + perUrl
+ "'> << </a> ");
str.append("<a href='" + url + pageStr + (cpageInt - 1)
+ perUrl);
str.append("'><</a> ");
} else {
str.append("<< < ");
}
int v = (cpageInt - 4) > 0 ? (cpageInt - 4) : 1;
int v1 = (cpageInt + 4) < totalInt ? (cpageInt + 4) : totalInt;
if (v1 == totalInt) {
v = totalInt - 10;
v = (v <= 0 ? 1 : v); // 如果为负数,则修改为1

} else if (v == 1 && v1 < totalInt) {
v1 = totalInt > 10 ? 10 : totalInt;
}
// 10个为一组显示
for (int i = v; i <= v1; i++) {
if (cpageInt == i) { // 当前页要加粗显示
str.append("<strong>" + i + "</strong> ");
} else {
str.append("<a href='" + url + pageStr + i + perUrl
+ "'>" + i + "</a> ");
}
}
// 如果多于1组并且不是最后一组,显示“> >>”

if (cpageInt < totalInt) {

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

// >:返回下一页

str.append("<a href='" + url + pageStr + (cpageInt + 1)
+ perUrl);

str.append("'>></a> ");

str.append("<a href='" + url + pageStr + totalInt + perUrl);

str.append("'> >> </a> ");

} else {

str.append("> >> ");

}

}
str.append("]");
}
str.append("</span>");

try {
writer.write(str.toString());
} catch (IOException e) {
logger.error(e);
}
return result;
}
//get set 方法区
}

public class Page extends Component {
private static final Log logger = LogFactory.getLog(Page.class);
public Page(ValueStack stack) {
super(stack);
}

private String pageNo; // 当前页码

private String totalPage; // 总页数

private String totalNum; // 总记录数

private String styleClass; // 分页的样式

private String theme; // 分页的主题

private String url; // action的路径

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

private String queryParames;

public String getQueryParames() {
return queryParames;
}

public void setQueryParames(String queryParames) {
this.queryParames = queryParames;
}

public boolean start(Writer writer) {
boolean result = super.start(writer);

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

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

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

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

obj = this.getStack().findValue(totalNum);
totalNum = 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 pageStr = "?totalNum=" + totalNum + "&pageNo=";

if ("dir".equals(urlType)) {
pageStr = "";

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

if (url.lastIndexOf("/") != url.length() - 1) {

if (url.lastIndexOf("1") == url.length() - 1) {// 如果有页码1,则去掉1

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

} else if (url.lastIndexOf("/") != url.length() - 1) {// 如果没有页码1,并且最后不是'/'时,加上'/'

url = url + "/";

}

}

} else {

url = url.substring(0, url.lastIndexOf("/") + 1);

}

}


// 下面这段处理主要是用来处理动态查询的参数,并拼接成url
StringBuffer perUrl = new StringBuffer("");
obj = this.getStack().findValue(queryParames);
if (!StringUtils.isObjNull(obj)) {
perUrl.append("&").append("queryParames").append("=").append(
StringUtils.decode((String) obj));
}

//当前页
Integer cpageInt = Integer.valueOf(pageNo);
str.append("<span> ");
// 文本样式
if (theme == null || "text".equals(theme)) {
// 当前页与总页数相等
if (pageNo.equals(totalPage)) {
// 如果total = 1,则无需分页,显示“[第1页] [共1页]”
if ("1".equals(totalPage)) {
str.append("[第 " + pageNo + " 页]");

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

} else {

// 到达最后一页,显示“[首页] [上一页] [末页]”
str.append("<a href='" + url + pageStr + "1" + perUrl
+ "'>[首 页]</a> ");

str.append("<a href='" + url + pageStr + (cpageInt - 1)
+ perUrl + "'>[上一页]</a>");

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

str.append(" <a href='" + url + pageStr + totalPage
+ perUrl + "'>[末 页]</a> ");

}

} else {

// 当前页与总页数不相同
if ("1".equals(pageNo)) {

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

str.append("<a href='" + url + pageStr + "1" + perUrl
+ "'>[首 页]</a>");
str.append("[上一页]");
str.append("<a href='" + url + pageStr + (cpageInt + 1)
+ perUrl + "'>[下一页]</a>");
str.append("<a href='" + url + pageStr + totalPage + perUrl
+ "'>[末 页]</a>");

} else {

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

str.append("<a href='" + url + pageStr + "1" + perUrl
+ "'>[首 页]</a>");

str.append("<a href='" + url + pageStr + (cpageInt - 1)
+ perUrl + "'>[上一页]</a>");

str.append("<a href='" + url + pageStr + (cpageInt + 1)
+ perUrl + "'>[下一页]</a>");

str.append("<a href='" + url + pageStr + totalPage + perUrl
+ "'>[末 页]</a>");

}

}

} else if ("number".equals(theme)) { // 数字样式 [1 2 3 4 5 6 7 8 9 10 > // >>]
Integer totalInt = Integer.valueOf(totalPage);
// 如果只有一页,则无需分页
str.append("[ ");
if (totalInt == 1) {
str.append("<strong>1</strong> ");
} else {
//当前页
if (cpageInt > 1) {
// 当前不是第一组,要显示“<< <”
// <<:返回前一组第一页
// <:返回前一页
str.append("<a href='" + url + pageStr + "1" + perUrl
+ "'> << </a> ");
str.append("<a href='" + url + pageStr + (cpageInt - 1)
+ perUrl);
str.append("'><</a> ");
} else {
str.append("<< < ");
}
int v = (cpageInt - 4) > 0 ? (cpageInt - 4) : 1;
int v1 = (cpageInt + 4) < totalInt ? (cpageInt + 4) : totalInt;
if (v1 == totalInt) {
v = totalInt - 10;
v = (v <= 0 ? 1 : v); // 如果为负数,则修改为1

} else if (v == 1 && v1 < totalInt) {
v1 = totalInt > 10 ? 10 : totalInt;
}
// 10个为一组显示
for (int i = v; i <= v1; i++) {
if (cpageInt == i) { // 当前页要加粗显示
str.append("<strong>" + i + "</strong> ");
} else {
str.append("<a href='" + url + pageStr + i + perUrl
+ "'>" + i + "</a> ");
}
}
// 如果多于1组并且不是最后一组,显示“> >>”

if (cpageInt < totalInt) {

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

// >:返回下一页

str.append("<a href='" + url + pageStr + (cpageInt + 1)
+ perUrl);

str.append("'>></a> ");

str.append("<a href='" + url + pageStr + totalInt + perUrl);

str.append("'> >> </a> ");

} else {

str.append("> >> ");

}

}
str.append("]");
}
str.append("</span>");

try {
writer.write(str.toString());
} catch (IOException e) {
logger.error(e);
}
return result;
}
//get set 方法区
} PageTag类,继承Struts2标签的 ComponentTagSupport。

Java代码
public class PageTag extends ComponentTagSupport {
private static final long serialVersionUID = -5371048231966321759L;

private String pageNo;

private String totalPage;

private String totalNum;

private String styleClass;

private String theme;

private String url;

private String urlType;

private String queryParames;

@Override
protected void populateParams() {

super.populateParams();

Page page = (Page) component;

page.setPageNo(pageNo);

page.setTotalPage(totalPage);
page.setTotalNum(totalNum);
page.setStyleClass(styleClass);

page.setTheme(theme);

page.setUrl(url);

page.setUrlType(urlType);
page.setQueryParames(queryParames);
}

@Override
public Component getBean(ValueStack stack, HttpServletRequest request,
HttpServletResponse response) {
return new Page(stack);
}

// get set 方法.......
}

public class PageTag extends ComponentTagSupport {
private static final long serialVersionUID = -5371048231966321759L;

private String pageNo;

private String totalPage;

private String totalNum;

private String styleClass;

private String theme;

private String url;

private String urlType;

private String queryParames;

@Override
protected void populateParams() {

super.populateParams();

Page page = (Page) component;

page.setPageNo(pageNo);

page.setTotalPage(totalPage);
page.setTotalNum(totalNum);
page.setStyleClass(styleClass);

page.setTheme(theme);

page.setUrl(url);

page.setUrlType(urlType);
page.setQueryParames(queryParames);
}

@Override
public Component getBean(ValueStack stack, HttpServletRequest request,
HttpServletResponse response) {
return new Page(stack);
}

// get set 方法.......
} 自定义分页的tld文件:

Xml代码
<?xml version="1.0" encoding="UTF-8"?>
<!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>fly</short-name>
<uri>/fly</uri>
<display-name>"fly Tags"</display-name>
<tag>
<name>pages</name>
<tag-class>com.fly.web.taglib.PageTag</tag-class>
<body-content>jsp</body-content>
<description>分页标签</description>
<attribute>
<name>pageNo</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>totalPage</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<description>总页数</description>
</attribute>
<attribute>
<name>totalNum</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<description>总记录数。</description>
</attribute>
<attribute>
<name>styleClass</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<description>分页标签的样式,不配置此项将采用默认的样式</description>
</attribute>
<attribute>
<name>theme</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<description>分页的主题,现支持number|text两种主题</description>
</attribute>
<attribute>
<name>url</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<description>分页提交的路径,默认不用配置该项,自动获取系统访问路径。</description>
</attribute>
<attribute>
<name>urlType</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>queryParames</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
<description>
查询参数
</description>
</attribute>
</tag>
</taglib>

<?xml version="1.0" encoding="UTF-8"?>
<!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>fly</short-name>
<uri>/fly</uri>
<display-name>"fly Tags"</display-name>
<tag>
<name>pages</name>
<tag-class>com.fly.web.taglib.PageTag</tag-class>
<body-content>jsp</body-content>
<description>分页标签</description>
<attribute>
<name>pageNo</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>totalPage</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<description>总页数</description>
</attribute>
<attribute>
<name>totalNum</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<description>总记录数。</description>
</attribute>
<attribute>
<name>styleClass</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<description>分页标签的样式,不配置此项将采用默认的样式</description>
</attribute>
<attribute>
<name>theme</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<description>分页的主题,现支持number|text两种主题</description>
</attribute>
<attribute>
<name>url</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<description>分页提交的路径,默认不用配置该项,自动获取系统访问路径。</description>
</attribute>
<attribute>
<name>urlType</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>queryParames</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
<description>
查询参数
</description>
</attribute>
</tag>
</taglib>

我们在jsp页面直接写

Html代码
<td align="center" nowrap>
记录总数
<s:property value="%{totalNum}" />条 每页显示10条
第<s:property value="pageNo" />页 <fly:pages pageNo="pageNo" totalPage="totalPage" totalNum="totalNum" styleClass="page" theme="text" queryParames="queryParames"> </fly:pages>
</td>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值