随笔-57  评论-202  文章-17  trackbacks-0
      由于篇幅较长,所以分开两篇来写。下面是我的一个实际例子,从数据库中分页获取管理员的数据,然后在JSP页面上表示出来。
      我的Action的代码:

 1import java.util.List;
 2import javax.servlet.http.*;
 3
 4import org.apache.struts.action.*;
 5
 6import xxx.Administrator;
 7import xxx.TurnPageForm;
 8import xxx.PageData;
 9
10/**
11 * <p>Title: </p>
12 *
13 * <p>Description: </p>
14 *
15 * <p>Copyright: Copyright (c) 2003</p>
16 *
17 * <p>Company: </p>
18 *
19 * @author George Hill
20 * @version 1.0
21 */

22
23public class AdminListAction extends Action {
24
25  private static final int NUMBER = 15;
26
27  /**
28   * 执行管理员列表操作
29   * @param mapping ActionMapping
30   * @param form ActionForm
31   * @param request HttpServletRequest
32   * @param response HttpServletResponse
33   * @throws Exception
34   * @return ActionForward
35   */

36  public ActionForward execute(ActionMapping mapping, ActionForm form,
37                               HttpServletRequest request,
38                               HttpServletResponse response) throws Exception {
39    HttpSession session = request.getSession();
40
41    //获取页码
42    String pageStr = request.getParameter("page");
43    if (pageStr == null)
44      pageStr = String.valueOf(session.getAttribute("page"));
45    else
46      session.setAttribute("page", pageStr);
47    int page = 1;
48    try {
49      page = Integer.parseInt(pageStr);
50    }
 catch (NumberFormatException nfe) {
51    }

52
53    //获得总记录数
54    int count = Administrator.countAllAdministrators();
55    int maxPage = count / NUMBER;
56    if (count % NUMBER != 0)
57      maxPage++;
58
59    //获得列表
60    List list = Administrator.getAdministrators(NUMBER, (page - 1* NUMBER);
61
62    if (count != 0 && list == null)
63      list = Administrator.getAdministrators(NUMBER, 0);
64
65    if (list != null{
66      PageData data = new PageData(list, page, maxPage);
67
68      request.setAttribute("admins", data);
69    }

70
71    //分页部分
72    TurnPageForm tform = new TurnPageForm();
73    tform.setCurrentPage(page);
74    tform.setMaxPage(maxPage);
75    request.setAttribute("turnPageForm", tform);
76
77    return mapping.findForward("list");
78  }

79}

80

      JSP页面部分的代码片断:

 1    <logic:present name="admins">
 2      <table width="90%" border="0" align="center" cellpadding="0" cellspacing="1" class="table6">
 3        <tr align="center" class="table4">
 4          <td width="10%" height="18" align="center" nowrap class="head1"><bean:message key="list.index"/></td>
 5          <td width="20%" class="head1" align="center" nowrap><bean:message key="admin.account"/></td>
 6          <td width="30%" class="head1" align="center" nowrap><bean:message key="admin.name"/></td>
 7          <td width="10%" class="head1" align="center" nowrap><bean:message key="admin.status"/></td>
 8          <td width="30%" class="head1" align="center" nowrap><bean:message key="list.action"/></td>
 9        </tr>
10      <logic:iterate name="admins" property="list" id="entry" indexId="index">
11        <tr class="table5" onmouseover="changeColor(this, '#99CCFF')" onmouseout="changeColor(this, '#F2F3F4')">
12          <td align="center" nowrap><bean:write name="index"/></td>
13          <td align="center" nowrap><bean:write name="entry" property="account"/></td>
14          <td align="center" nowrap><bean:write name="entry" property="name"/></td>
15        <logic:equal name="entry" property="status" value="true">
16          <td align="center" nowrap><bean:message key="status.enable"/></td>
17          <td align="center" nowrap>
18            <html:link page="/disableAdmin.do?status=false" paramId="account" paramName="entry" paramProperty="account" onclick="return MM_popupDisableMsg()">
19              <font color="red"><bean:message key="status.disable"/></font>
20            </html:link>
21            <html:link page="/modifyAdmin.do?action=link" paramId="account" paramName="entry" paramProperty="account">
22              <bean:message key="action.modify"/>
23            </html:link>
24            <html:link action="/deleteAdmin" paramId="account" paramName="entry" paramProperty="account" onclick="return MM_popupDelMsg()">
25              <font color="red"><bean:message key="action.delete"/></font>
26            </html:link>
27          </td>
28        </logic:equal>
29        <logic:equal name="entry" property="status" value="false">
30          <td align="center" nowrap><font color="red"><bean:message key="status.disable"/></font></td>
31          <td align="center" nowrap>
32            <html:link page="/enableAdmin.do?status=true" paramId="account" paramName="entry" paramProperty="account">
33              <bean:message key="status.enable"/>
34            </html:link>
35            <html:link page="/modifyAdmin.do?action=link" paramId="account" paramName="entry" paramProperty="account">
36              <bean:message key="action.modify"/>
37            </html:link>
38            <html:link action="/deleteAdmin" paramId="account" paramName="entry" paramProperty="account" onclick="return MM_popupDelMsg()">
39              <font color="red"><bean:message key="action.delete"/></font>
40            </html:link>
41          </td>
42        </logic:equal>
43        </tr>
44      </logic:iterate>
45      </table>
46      <table width="90%" border="0" align="center" cellpadding="3" cellspacing="0">
47        <tr>
48          <td align="left"></td>
49        <html:form action="/turnPage" method="POST">
50          <td align="right" nowrap>
51            <html:hidden property="url" value="/listAdmin.do"/>
52            <html:hidden property="currentPage"/>
53            <html:hidden property="maxPage"/>
54            <bean:message key="page.the"/>
55            <bean:write name="admins" property="page"/>
56            <bean:message key="page.page"/>/
57            <bean:message key="page.all"/><bean:write name="admins" property="maxPage"/><bean:message key="page.page"/>
58            <bean:message key="page.turn"/>
59          <logic:equal name="admins" property="maxPage" value="1">
60            <html:text property="page" styleClass="input_log" styleId="page" size="3" value="" disabled="true"/>
61            <html:submit property="turn" styleClass="t_input" styleId="turn" value="GO" disabled="true"/>
62          </logic:equal>
63          <logic:notEqual name="admins" property="maxPage" value="1">
64            <html:text property="page" styleClass="input_log" styleId="page" size="3" value=""/>
65            <html:submit property="turn" styleClass="t_input" styleId="turn" value="GO"/>
66          </logic:notEqual>
67          <logic:equal name="admins" property="firstPage" value="true">
68            <html:submit property="first" styleClass="t_input" styleId="first" disabled="true"><bean:message key="page.first"/></html:submit>
69            <html:submit property="preview" styleClass="t_input" styleId="preview" disabled="true"><bean:message key="page.previous"/></html:submit>
70          </logic:equal>
71          <logic:notEqual name="admins" property="firstPage" value="true">
72            <html:submit property="first" styleClass="t_input" styleId="first"><bean:message key="page.first"/></html:submit>
73            <html:submit property="preview" styleClass="t_input" styleId="preview"><bean:message key="page.previous"/></html:submit>
74          </logic:notEqual>
75          <logic:equal name="admins" property="lastPage" value="true">
76            <html:submit property="next" styleClass="t_input" styleId="next" disabled="true"><bean:message key="page.next"/></html:submit>
77            <html:submit property="last" styleClass="t_input" styleId="last" disabled="true"><bean:message key="page.last"/></html:submit>
78          </logic:equal>
79          <logic:notEqual name="admins" property="lastPage" value="true">
80            <html:submit property="next" styleClass="t_input" styleId="next"><bean:message key="page.next"/></html:submit>
81            <html:submit property="last" styleClass="t_input" styleId="last"><bean:message key="page.last"/></html:submit>
82          </logic:notEqual>
83          </td>
84        </html:form>
85        </tr>
86      </table>
87    </logic:present>

      实际的页面效果图:

sample.JPG

      OK,我的整个实现就完成了。我觉得有许多地方还是需要完善的,例如我的实现不够抽象,而且觉得繁琐了点,不过我一直都用着,还没有碰到过什么问题。请各位看完以后多多指教。
posted on 2005-05-13 11:33 小米 阅读(4815) 评论(25)  编辑  收藏 所属分类: Struts

评论:
# re: 如何在Struts中实现分页显示数据(2) 2005-05-16 15:26 | 平淡是真
你好!很高兴认识你!我是一个搞IT的女子,可是总感到力不从心,因为自己的基础好象很差!所以没有什么信心!你能给我一些指导吗?  回复  更多评论
  
# re: 如何在Struts中实现分页显示数据(2) 2005-05-16 22:36 | 小米
指导不敢当,大家一起交流。信心可以慢慢建立的,毕竟谁也不是一生下来什么都会。很高兴,终于有人回复了。还以为这里的人全部都喜欢潜水的。:),你坐了我的沙发哦。  回复  更多评论
  
# re: 如何在Struts中实现分页显示数据(2) 2005-06-09 11:29 | emu
可以看看这个:http://displaytag.sourceforge.net/

Actually the display tag library can just... display tables! Give it a list of objects and it will handle column display, sorting, paging, cropping, grouping, exporting, smart linking and decoration of a table in a customizable XHTML style

  回复  更多评论
  
# re: 如何在Struts中实现分页显示数据(2) 2005-06-09 17:09 | 小米
嗯,不错,谢谢你提供的资料。  回复  更多评论
  
# re: 如何在Struts中实现分页显示数据(2) 2005-07-31 13:05 | kk
你的代码没有贴完阿  回复  更多评论
  
# re: 如何在Struts中实现分页显示数据(2) 2005-07-31 21:52 | 小米
我已经贴完了啊。你是说哪部分有问题呢?  回复  更多评论
  
# re: 如何在Struts中实现分页显示数据(2) 2005-08-01 00:30 | kk
我是说: import xxx.Administrator 你导入的这个类的Administrator的代码没有贴上,无法得知你的 List list = Administrator.getAdministrators(NUMBER, (page - 1) * NUMBER);和 list = Administrator.getAdministrators(NUMBER, 0);两个方法怎么实现的。

最好能把源码发给我一份看看,谢谢你了。
MSN:yjj03317@hotmail.com
QQ: 76912421
e-mail:yjj317@163.com
  回复  更多评论
  
# re: 如何在Struts中实现分页显示数据(2) 2005-08-01 10:01 | 小米
这是在公司写的代码,不方便贴出来的。Administrator.getAdministrators(NUMBER, (page - 1)*NUMBER)方法就是从数据库中获取某个表的一部分记录的方法。这个需要根据具体的情况实现的。我这里都主要说的是原理,所以代码部分没有贴完整。  回复  更多评论
  
# re: 如何在Struts中实现分页显示数据(2) 2005-08-01 10:27 | kk
我觉得要是交流的话最好能写个小例子,最好完整点啊
不过还是要说声:谢谢  回复  更多评论
  
# re: 如何在Struts中实现分页显示数据(2) 2005-08-01 12:09 | 小米
不客气,以后尽量把例子写的完整些。呵呵。:)  回复  更多评论
  
# re: 如何在Struts中实现分页显示数据(2) 2005-08-01 15:04 | kk
总算写好了一个关于分页的例子,等我的博客搞好后,就把代码贴上去,大家一起交流。:)  回复  更多评论
  
# re: 如何在Struts中实现分页显示数据(2) 2005-08-01 15:38 | 小米
呵呵,欢迎交流。:)  回复  更多评论
  
# re: 如何在Struts中实现分页显示数据(2) 2005-08-26 11:06 | flyingis
如果能给出该方法 Administrator.getAdministrators(NUMBER, (page - 1) * NUMBER); 中的SQL语句就好了,不知道楼主是否方便?  回复  更多评论
  
# re: 如何在Struts中实现分页显示数据(2) 2005-08-28 23:03 | 小米
在MySQL中,这样的语句应该是这样的SELECT * FROM [TABLE] ORDER BY [FIELD] LIMIT ? OFFSET ?  回复  更多评论
  
# re: 如何在Struts中实现分页显示数据(2) 2005-08-29 16:32 | flyingis
谢谢!
可是没有看到number和(page-1)*number在SQL中出现啊?  回复  更多评论
  
# re: 如何在Struts中实现分页显示数据(2) 2005-08-29 22:29 | 小米
LIMIT ? OFFSET ?中的两个问号分别对应的就是number和(page - 1) * number。我觉得你可能需要多看看JDBC和数据库的基础编程。这里用的是PreparedStatement,所以用?号做占位符号。  回复  更多评论
  
# re: 如何在Struts中实现分页显示数据(2) 2005-12-19 16:20 | ahua
看过了,写得不是太清楚,,,,,,,,,,,,对太多人没有实际价值
我初学,不是太懂,,虽然也做过自己的分页,,,但不太理解你代码的意义  回复  更多评论
  
# re: 如何在Struts中实现分页显示数据(2) 2006-02-18 10:44 | fjxmhjz
我只能看到第2部分,代码不全。

最好能把源码发给我一份看看,谢谢你了。

e-mail:fjxmhjz@tom.com  回复  更多评论
  
# re: 如何在Struts中实现分页显示数据(2) 2006-09-23 11:54 | sartre
你好,我觉得你的表格的样子到是不错,能否把定义表格的css代码,发一份给我,自己做显示的时候可以用一下,谢谢!! sartre05@163.com  回复  更多评论
  
# re: 如何在Struts中实现分页显示数据(2) 2006-12-03 19:26 | 小新
你的文章真的不错。看过了感觉很好啊!我也是学java的,现在还有一年毕业,希望和你交个朋友!  回复  更多评论
  
# re: 如何在Struts中实现分页显示数据(2) 2007-04-25 11:53 | sadsardine
你的代码可读性很好,很容易看懂,但结构不太好,分页的逻辑应该做成一个接口。还有那个当前页码的传递你放在了SESSION里,总觉得这样弄结构不好,不过我也没有更好的办法。另外我有个疑问,你JSP中显示数据用的BEAN不是PAGEDATA而是ADMIN,是怎么回事?还有个问题请教,
if (tform.getUrl().indexOf("?") == -1) {
url = tform.getUrl() + "?page=" + page;
} else {
url = tform.getUrl() + "&page=" + page;
}
如果这段代码之前url的值是“a?page=1”,执行这段代码之后url的值是什么?是“a?page=1&page=2”,这样再ACTION中拿到的page是1还是2?
  回复  更多评论
  
# re: 如何在Struts中实现分页显示数据(2) 2007-09-17 23:42 | peanent
请问前辈如果我想已下面一种想法去做我该如何实现呢。
问题定义:
1、同样适用<html:link>,每次点击下一页,提交action,在action中把页面上的form传过去,然后根据form中的值重新到数据库中去检索数据,把下一页的数据存放到request中在页面显示。
我现在遇到的问题是,用户在表单输入数据以后点击检索按钮能正常显示第一页的数据,但是如果点击第二页,第三页。。。。下一页的链接之后就不能显示这些页面的值,原因是form没有提交上去,显示form的值为NULL,自然也就取不到用户写到form中的值,不能根据form中的值从数据库中重新检索数据显示到页面上
请问:
是不是html:link标签不能提交form还是html:link标签会重置request中的form导致action中的form为NULL呢

恳请前辈们给予我指教,谢谢!

  回复  更多评论
  
# re: 如何在Struts中实现分页显示数据(2) 2008-05-15 19:50 | f
你的Adiministator在哪了??
是个啥啊,也不介绍介绍,大家知道要实现啥处理啊  回复  更多评论
  
# re: 如何在Struts中实现分页显示数据(2) 2008-09-01 11:28 | 小文
先谢谢楼主。。虽然我没有抢到沙发。。但是我仍很高兴。。请问这个表格的CSS样式该怎么编写。。看到您的实例。感觉不错。。所以也想跟楼主学习学习。。。


我的QQ: 452241943 邮箱: YoungEngineer@163.com 期待楼主。  回复  更多评论
  
# re: 如何在Struts中实现分页显示数据(2) 2008-12-29 23:36 | 小飞刀
你的admins中只有3个属性啊,page、list、maxPage这三个属性,而在你的jsp中怎么又多出了lastPage、firstPage这两个属性了,难道说,这两个属性是从list中的?,要是那样的话,能否分享一下啊 bifnmqj@sina.com  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: