中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> Bea专区 > BEA Workshop
深入Beehive标签库系列教程(6) - 使用标签遍历数据
作者:肖菁 时间:2006-08-04 13:09 出处:bea.com.cn 责编:月夜寒箫
              摘要:深入Beehive标签库系列教程(6) - 使用标签遍历数据
 Web应用中,要遍历对象显示数据的情况非常多,比如我们需要列表显示数据库单个表中的所有用户信息,通常会在Action中获取所有用户信息,然后传递给JSP页面,在JSP页面中遍历后显示,由于MVC架构中要求JSP页面中不能使用Java代码,因此NETUI中提供了对应的标签来完成这部分数据的显示。

  NETUI标签库中用于遍历显示数据的标签有五个,分别是netui-data:repeater、netui-data:repeaterItem、netui-data: repeaterHeader、netui-data: repeaterFooter、netui-data: cellRepeater。

  netui-data: cellRepeater 标签可以单独完成遍历显示数据功能,默认使用表格显示数据,它可以通过设置columns属性决定每行显示多条数据,或者设置rows属性表示所有数据使用表格的几行来显示,不过这种方法中我们无法对数据的显示行为进行干预,表格的表头需要使用在标签外部独立生成,而且对于表格的外观只能使用使用css进行定义,无法独立控制。

  netui-data:repeater、netui-data:repeaterItem、netui-data: repeaterHeader、netui-data: repeaterFooter四个标签可以整合起来完成遍历显示数据的功能,这种方式提供了更好的灵活性。netui-data:repeater标签用于设置要显示的内容;netui-data: repeaterHeader可以设置数据显示前需要显示的内容,比如显示一段文字,或者显示表格的表头;netui-data: repeaterFooter则用于设置数据显示完后需要输出的信息,比如输出表格的结束标签</table>,或者给出一些提示信息;netui-data:repeaterItem标签用于遍历集合中的每一条记录。

  netui-data: repeaterHeader和netui-data: repeaterFooter标签提供的内容只显示一次,因此主要提供一些辅助内容,比如显示表头内容等,不能用于遍历显示数据。

  下面我们来看看使用这两种不同的标签显示ArrayList数据的例子,我们使用自定义的JavaBean----UserBean类。为了演示的简单,我们在Action中使用以下的语句创建了10个User对象的集合传递给页面用于显示。

  1. ArrayList list = new ArrayList();
  2. for( int i = 0;i<10;i++){
  3. UserBean user = new UserBean();
  4. user.setName(“” + i);
  5. user.setPassword(“name” + i);
  6. list.add(user);
  7. }
  8. f.addActionOutput (“users”,list);
  • netui-data:cellRepeater

      首先我们来看看使用如何使用netui-data: cellRepeater完成遍历显示数据 ,首先在JSP页面中使用如下代码完成数据的绑定。

      <netui-data:declarePageInput name=“users”

      type=“java.util.ArrayList” required=“true” />

      然后使用如下代码来显示所有用户的用户编号和名称,设置netui-data:cellRepeater 标签的columns属性为”1”,确定每行显示一个用户的用信息。

        
    1. <table border=“1”>
    2. <tr>
    3. <td>用户信息</td>
    4. </tr>
    5. </table>
    6. <netui-data:cellRepeater dataSource=“pageInput.users” columns=“2” tableClass=“border” >
    7. <netui:span value=“${container.item.name}”/>
    8. </netui-data:cellRepeater>

      另外一种方式是我们设置netui-data:cellRepeater的rows属性为”5”,表示所有内容必须在5行内显示完毕,NETUI会自动地将这些数据按照要求分组后显示。

        
    1. <table border=“1”>
    2. <tr>
    3. <td>用户信息</td>
    4. <td>用户信息</td>
    5. </tr>
    6. </table>
    7. <netui-data:cellRepeater dataSource=“pageInput.users” rows=“5” tableClass=“border” >
    8. <netui:span value=“${container.item.name}”/>
    9. </netui-data:cellRepeater>

      使用rows属性定义netui-data:cellRepeater标签的用法不多见,因为开发者无法预知可能出现的表格列数,因而也无法提供对应的表头信息。

      当netui-data:cellRepeater标签中需要显示两列或者多列时,我们可以使用verticalRepeat属性来设置标签如何选择列中的数据。verticalRepeat属性支持”true”、”false”两种选择。

      当verticalRepeat属性设置为”true”时,标签按照从上往下、从左往右的顺序填充表格;如果将verticalRepeat属性设置为”false”是,netui-data:cellRepeater按照从左到右、从上到下的顺序填充表格。默认情况是”false”。

      比如上面例子中的10个对象,我们如果每行显示两个对象,当netui-data:cellRepeater标签的verticalRepeat属性为”true”时,显示效果如图1所示。netui-data:cellRepeater标签的verticalRepeat属性为”false”时,显示效果如图2所示


    图1 按照从上往下、从左往右的顺序填充表格的效果


    图2 按照从左往右、从上往下的顺序填充表格的效果

  • netui-data:repeater、netui-data:repeaterHeader、netui-data: repeaterFooter、netui-data:repeaterItem

      和netui-data:cellRepeater标签的例子一样,我们使用<netui-data:declarePageInput name=“users” type=“java.util.ArrayList” required=“true” />完成数据在JSP中的绑定,然后我们增加netui-data:repeater标签,设置它的dataSource属性pageInput.userbeans,增加netui-data:repeaterHeader输出表头信息,还可以增加额外的提示信息,增加netui-data:repeaterItem遍历数据,用一行输出一条记录,最后增加netui-data: repeaterFooter标签完成数据显示,包括关闭<table>标签和显示其他的内容。实现这部分功能的完整代码如下。

        
    1. <netui-data:repeater dataSource=“pageInput.userbeans”>
    2. <netui-data:repeaterHeader>
    3. 所有User对象信息
    4. <table border=“1”>
    5. <tr>
    6. <td>用户名</td>
    7. <td>密码</td>
    8. </tr>
    9. </netui-data:repeaterHeader>
    10. <netui-data:repeaterItem >
    11. <tr>
    12. <td><netui:span value=“${container.item.name}” /></td>
    13. <td><netui:span value=“${container.item.password}” /></td>
    14. </tr>
    15. </netui-data:repeaterItem>
    16. <netui-data:repeaterFooter>
    17. </table>
    18. </netui-data:repeaterFooter>
    19. </netui-data:repeater>

      将%NETUI_HOME%目录下的Web应用编译、发布到Tomcat后(上下文路径netui),可以使用http://localhost:8080/netui/cellRepeaterExamples.do访问这个netui:cellRepeater标签的例子,使用http://localhost:8080/netui/repeaterExamples.do可以访问netui:repeater标签的例子。

      和遍历显示数据相关的JSP文件和Java源代码的完整内容请参考下面的代码清单。

      清单2-14 web\Controller.java

        
    1. import javax.servlet.http.HttpSession;
    2. import org.apache.beehive.netui.pageflow.Forward;
    3. import org.apache.beehive.netui.pageflow.PageFlowController;
    4. import org.apache.beehive.netui.pageflow.annotations.Jpf;
    5. import org.vivianj.beehive.examples.beans.UserBean;
    6. import java.util.List;
    7. import java.util.ArrayList;
    8. @Jpf.Controller(
    9. simpleActions={
    10. @Jpf.SimpleAction(name="begin", path="index.jsp")
    11. },
    12. sharedFlowRefs={
    13. @Jpf.SharedFlowRef(name="shared", type=shared.SharedFlow.class)
    14. }
    15. )
    16. public class Controller
    17. extends PageFlowController
    18. {
    19. @Jpf.Action(forwards = { @Jpf.Forward(name = "success", path = "pageInputExample.jsp") })
    20. public Forward pageInputExamples() {
    21. Forward f = new Forward("success");
    22. /* 向JSP页面传递数据 */
    23. f.addActionOutput("hellostring", "Hello World!");
    24. String[] strings = new String[]{"Hello World!","Hello Beehive!"};
    25. /* 向JSP页面传递数组 */
    26. f.addActionOutput("strings", strings);
    27. /* 向JSP页面传递自定义对象 */
    28. UserBean userBean = new UserBean();
    29. userBean.setId(100);
    30. userBean.setName("UserBean100");
    31. f.addActionOutput("userbean", userBean);
    32. /* 向JSP页面传递List对象 */
    33. List list = new ArrayList();
    34. list.add(userBean);
    35. UserBean userBean1 = new UserBean();
    36. userBean.setId(101);
    37. userBean.setName("UserBean101");
    38. list.add(userBean1);
    39. f.addActionOutput("userbeans", list);
    40. return f;
    41. }
    42. @Jpf.Action(forwards = { @Jpf.Forward(name = "success", path = "cellRepeaterExample.jsp") })
    43. public Forward cellRepeaterExamples() {
    44. Forward f = new Forward("success");
    45. ArrayList list = new ArrayList();
    46. for( int i = 0;i<10;i++){
    47. UserBean user = new UserBean();
    48. user.setId(i);
    49. user.setName("name" + i);
    50. list.add(user);
    51. }
    52. f.addActionOutput("userbeans", list);
    53. return f;
    54. }
    55. @Jpf.Action(forwards = { @Jpf.Forward(name = "success", path = "repeaterExample.jsp") })
    56. public Forward repeaterExamples() {
    57. Forward f = new Forward("success");
    58. ArrayList list = new ArrayList();
    59. for( int i = 0;i<10;i++){
    60. UserBean user = new UserBean();
    61. user.setId(i);
    62. user.setName("name" + i);
    63. list.add(user);
    64. }
    65. f.addActionOutput("userbeans", list);
    66. return f;
    67. }
    68. protected void onCreate()
    69. {
    70. }
    71. protected void onDestroy(HttpSession session)
    72. {
    73. }
    74. }

      清单2-15 web\cellRepeaterExamples.jsp

        
    1. <%@ page language="java" contentType="text/html;charset=gb2312"%>
    2. <%@ page import="org.vivianj.beehive.examples.beans.UserBean" %>
    3. <%@ taglib uri="http://beehive.apache.org/netui/tags-databinding-1.0"
    4. prefix="netui-data"%>
    5. <%@ taglib uri="http://beehive.apache.org/netui/tags-html-1.0"
    6. prefix="netui"%>
    7. <%@ taglib uri="http://beehive.apache.org/netui/tags-template-1.0"
    8. prefix="netui-template"%>
    9. <netui:html>
    10. <head>
    11. <title>Repeater Examples</title>
    12. <netui:base/>
    13. <style type="text/css">
    14. <!--
    15. .p1 {
    16. width: 200;
    17. border: 1px solid;
    18. }
    19. -->
    20. </style>
    21. </head>
    22. <netui:body>
    23. <center>使用标签遍历显示数据的例子</center><BR>
    24. <netui-data:declarePageInput name="userbeans"
    25. type="java.util.ArrayList" required="true" />
    26. <TABLE border="1" width="800" align="Center">
    27. <TR>
    28. <TD>使用netui-data:cellRepeater标签遍历显示数据</TD>
    29. <TD>在netui-data:cellRepeater标签上应用css样式</TD>
    30. </TR>
    31. <TR>
    32. <TD valign="top">
    33. <center>
    34. <table>
    35. <tr>
    36. <td>编号 : 名称</td>
    37. </tr>
    38. </table>
    39. </center>
    40. <center>
    41. <netui-data:cellRepeater dataSource="pageInput.userbeans"
    42. columns="1">
    43. <netui:span value="${container.item.id}"/> :
    44. <netui:span value="${container.item.name}"/>
    45. </netui-data:cellRepeater>
    46. </center>
    47. </TD>
    48. <TD valign="top">
    49. <center>
    50. <table class="p1">
    51. <tr>
    52. <td>编号 : 名称</td>
    53. </tr>
    54. </table>
    55. </center>
    56. <center>
    57. <netui-data:cellRepeater dataSource="pageInput.userbeans"
    58. columns="2" tableClass="p1" cellClass="p1"
    59. verticalRepeat="false">
    60. <netui:span value="${container.item.id}"/> :
    61. <netui:span value="${container.item.name}"/>
    62. </netui-data:cellRepeater>
    63. </center>
    64. </TD>
    65. </TR>
    66. </TABLE>
    67. </netui:body>
    68. </netui:html>

      清单2-16 web\repeaterExamples.jsp

        
    1. <%@ page language="java" contentType="text/html;charset=gb2312"%>
    2. <%@ page import="org.vivianj.beehive.examples.beans.UserBean" %>
    3. <%@ taglib uri="http://beehive.apache.org/netui/tags-databinding-1.0"
    4. prefix="netui-data"%>
    5. <%@ taglib uri="http://beehive.apache.org/netui/tags-html-1.0"
    6. prefix="netui"%>
    7. <%@ taglib uri=http://beehive.apache.org/netui/tags-template-1.0
    8. prefix="netui-template"%>
    9. <netui:html>
    10. <head>
    11. <title>Repeater Examples</title>
    12. <netui:base/>
    13. </head>
    14. <netui:body>
    15. <center>使用标签遍历显示数据的例子</center><BR>
    16. 使用netui-data:repeater标签遍历显示数据
    17. <netui-data:declarePageInput name="userbeans"
    18. type="java.util.ArrayList" required="true" />
    19. <netui-data:repeater dataSource="pageInput.userbeans">
    20. <netui-data:repeaterHeader>
    21. 所有User对象信息
    22. <table border="1">
    23. <tr>
    24. <td>用户名</td>
    25. <td>密码</td>
    26. </tr>
    27. </netui-data:repeaterHeader>
    28. <netui-data:repeaterItem >
    29. <tr>
    30. <td><netui:span value="${container.item.id}" /></td>
    31. <td><netui:span value="${container.item.name}" /></td>
    32. </tr>
    33. </netui-data:repeaterItem>
    34. <netui-data:repeaterFooter>
    35. </table>
    36. </netui-data:repeaterFooter>
    37. </netui-data:repeater>
    38. </netui:body>
    39. </netui:html>
     
关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有