JSF控件实现动态加载树状菜单

本文介绍如何使用JSF中的<ig:Sidebar>组件实现动态加载菜单功能。通过创建SidebarGroup并设置属性,可以方便地添加首节点及子节点。

 

使用JSF中的<ig:Sidebar></ig:Sidebar>实现动态加载菜单,其中bar.getChildren().add(aSidebarGroup);是实现动态加载首节点,HtmlSidebarGroup aSidebarGroup = (HtmlSidebarGroup) application.createComponent(HtmlSidebarGroup.COMPONENT_TYPE);
    aSidebarGroup.setText(boardName);
    aSidebarGroup.setExpanded(true);
    aSidebarGroup.setId(viewRoot.createUniqueId());实现加载该节点下的子节点,非常方便。

private Sidebar buildSideBar(Sidebar bar)
 {
  boolean isInitialised = bar.getAttributes().get("IS_INITIALISED")!=null;
  
  if (!isInitialised) {
   // Get a reference to the JSF Application,
   // we need it to create value bindings later-on
   Application application = FacesContext.getCurrentInstance().getApplication();
   UIViewRoot viewRoot = FacesContext.getCurrentInstance().getViewRoot();
   
   /* Create Infragistics SidebarGroup */
   // Set the Sidebar's width and height
   bar.getAttributes().put("style","width: 155px; height: 590px;");
   // Create SidebarGroup
   List list = this.getBoardNameForMenu();
   for(int i = 0 ;i<list.size();i++)
   {
    Object[] row = (Object[])list.get(i);
   //Object[] row = (Object[])list.listIterator().next();
    String boardId = String.valueOf(row[0]);
    String boardName = String.valueOf(row[1]);
    String parentId = String.valueOf(row[2]);
    HtmlSidebarGroup aSidebarGroup = (HtmlSidebarGroup) application.createComponent(HtmlSidebarGroup.COMPONENT_TYPE);
    aSidebarGroup.setText(boardName);
    aSidebarGroup.setExpanded(true);
    aSidebarGroup.setId(viewRoot.createUniqueId());
   
    // Add the newly created SidebarGroup to the Sidebar's children list
    bar.getChildren().add(aSidebarGroup);
    
    List ls = this.getBoardNameForMenuBar(Integer.parseInt(boardId));
    if(ls.size() != 0)
    {
     for(int j=0;j<ls.size();j++)
     {
      Object[] row1 = (Object[])ls.get(j);
      String boardid = String.valueOf(row1[0]);
      String boardname = String.valueOf(row1[1]);
      //HtmlSidebarGroup aSidebarGroup = (HtmlSidebarGroup) application.createComponent(HtmlSidebarGroup.COMPONENT_TYPE);
      HtmlLink aLink1 = (HtmlLink)application.createComponent(HtmlLink.COMPONENT_TYPE);
      aLink1.setId(viewRoot.createUniqueId());
      //aSidebarGroup.setText(sidebarGroupNameStr);
      //aSidebarGroup.setExpanded(true);
      //aSidebarGroup.setId(viewRoot.createUniqueId());
      //aLink1.setId(parentId);
      aLink1.setUrl("/pages/bbs/visitor/topic/topicforboard.jsf?boardid="+boardid+"");
      aLink1.setValue(boardname);
      aSidebarGroup.getChildren().add(aLink1);
     }
    }
    
   }

 JSF2.xdatatable分页控件与左侧菜单最简单应用   JSF2.x,功能强大,使用方便。全世界使用JSF的人越来越多。而且也有很多很好的控件给发出来了,如:richfaces、primefaces、myfaces等,就日前来讲primefaces功能很强大,控件很多,但有一点不好就是不支持IE6,特别是下拉列表,p:dialog等,其它的分页p:datatable实际使用起来总有不如意的地方。richfaces还支持可视化开发,可惜就是控件开发进度相比其它的慢了很多。下面帖我的控件的使用方法:   下载地址:http://download.csdn.net/detail/ptianfeng/4802713 一、分页具体使用方法如下(不多说,直接给你些颜色看看): 1. xhtml文件:    <html xmlns:ems="http://www.ems.com.cn" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:ui="http://java.sun.com/jsf/facelets"> <h:dataTable id="tableId" value="#{userlogMBean.defaultDataModel}" var="var" rows="10"> <h:column> <f:facet name="header"> <h:outputText value="" /> </f:facet> <h:outputText value="#{var.sqlid}" /> </h:column> </h:dataTable> <ems:page id="pageId" for="tableId" maxPage="5" /> 2. 相应的Managedbean: [java] view plaincopy /** * EMS 11185 限时未达邮费奉还 * @author 螃蟹 */ @SuppressWarnings(value = "serial") @ManagedBean(name = "userlogMBean") @ViewScoped() public class UserlogMBean extends PageListBaseBean implements Serializable { public PagedListDataModel getDefaultDataModel() { if (defaultDataModel == null) { defaultDataModel = new PagedListDataModel(pageSize) { public DataPage fetchPage(int startRow, int pageSize) { ArrayList<UserlogVo> dataList = new ArrayList<UserlogVo>(); List<Userlog> list = dao.getObjectList(jpql, pageSize, startRow); if (list != null) { for (Userlog u : list) { UserlogVo vo = new UserlogVo(); vo.setSqlid(u.getSqlid()); vo.setCode(u.getCode()); vo.setDate(u.getDate()); vo.setStation(u.getStation()); vo.setUserid(u.getUserid()); vo.setText(u.getText()); dataList.add(vo); } } int size = dao.getCountOption(jpql); DataPage dataPage = new DataPage(size, startRow, dataList); return dataPage; } }; } return defaultDataModel; } } 提示:关于PageListBaseBean更多的信息,可以参阅我在百度的blog(百度改版后,让我很QF,所以转到优快云来了): http://hi.baidu.com/kittopang/item/19af4e37c6ede2fae6bb7a11   至此,分页已经实现。下面是使用截图:
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值