中国java开源文档大全
java教程,java开源文档大全
java教程,java开源文档大全
首页 java基础 web开发框架 开发工具 应用系统 组件类库 搜索爬虫 J2EE服务器 持久层相关 测试工具 访客留言 投稿专栏 站内搜索
java教程,java开源文档大全
>首页 -> web开发框架 -> MyFaces

TOP

如何使用myFaces的建立一个xml文件的树形表示
[ 录入者:admin | 时间:2007-12-27 08:09:19 | 作者: | 来源:原创 | 浏览:6次 ]
  java开源文档大全致力于打造中国最大最全的开源文档,它提供了最全面最权威的开源资料,同时为大家提供一个交流的平台,如果您有好的想法,欢迎您投稿.


在myFaces中有个标签为,使用这个标签可以在页面上显示一个动态的树形结果,效果类似于资源管理器。

在myFaces中有个标签为<x:tree>,使用这个标签可以在页面上显示一个动态的树形结果,效果类似于资源管理器。

本来,这个标签的出现很容易让人联想到是为了显示xml设计的,但是事实上要用这个标签去显示xml文件并非如此容易的。

在myFaces提供的demo中,<x:tree>标签中用到的数据都是事先硬编码到程序中的。但是如果要显示xml文件却没有那么简单。文件不同,xml的结构也不同,显示的内容也不同。这样就需要在每次显示xml文件的时候都重构一个<x:tree>支持的结构。<x:tree>支持的结构为DefaultMutableTreeNode。

将一个xml文件转化为DefaultMutableTreeNode结构的过程如下。

我们得到的是一个w3c的document,其中包含了xml文件的内容。

一,将w3c的document转成jdom的document

 public static DefaultMutableTreeNode readDom(Document domDoc){
      //w3cドキュメントをjdomドキュメントに転換する。
      DOMBuilder builder = new DOMBuilder();
     org.jdom.Document jdomDoc = builder.build(domDoc);
  
     Element parent = jdomDoc.getRootElement();
     //表示のトリーを構築する。
     DefaultMutableTreeNode root = accessElement(parent,null);
     return root ;
 }

在这个方法里面将w3c的document转成了jdom的document,然后使用accessElement方法进行document到DefaultMutableTreeNode结构的转换。

 private  static  DefaultMutableTreeNode  accessElement(Element  parent,DefaultMutableTreeNode nodeTree) 
 { 
      if(nodeTree==null){
         nodeTree = new DefaultMutableTreeNode(CombineElementAttr(parent));
      }
     List listChild = parent.getChildren(); 
     int iChild = listChild.size();
    if(iChild==0){
      if(parent.getContent().size()>0){
      //elementの内容を取得する。
      DefaultMutableTreeNode node = new DefaultMutableTreeNode(CombineContent(parent));
      //System.out.println(CombineContent(parent));
      nodeTree.insert(node);
     }
    }else{
     //サブノードのdomのelementを取得する。
     for(int i = 0;i < iChild;i++) 
     { 
      Element e = (Element)listChild.get(i); 
      DefaultMutableTreeNode node = new DefaultMutableTreeNode(CombineElementAttr(e));
      //System.out.println(CombineElementAttr(e));
      nodeTree.insert(node);      
      //递归,将字节点增加到nodeTree中去
      accessElement(e,node); 
     }
   }
    return nodeTree;
  }

在accessElement方法中出现的CombineElementAttr是将元素中的属性合并到一个字符串中,用于最终的显示。具体实现如下:

 private static String CombineElementAttr(Element ele){
      StringBuffer eleString = new StringBuffer("<");
      eleString.append(ele.getName()).append(" ");
      List attr = ele.getAttributes();
      for(Iterator iter = attr.iterator();iter.hasNext();){
       Attribute attrElement = (Attribute)iter.next();
       eleString.append(attrElement.getName())
          .append("=")
          .append("\"")
          .append(attrElement.getValue())
          .append("\"")
          .append(" ");
      }
     eleString.append("/>");
     return eleString.toString();
 }

在accessElement方法中出现的CombineContent是将内容合并到一个字符串中,用于最终的显示。具体实现如下:

 private static String CombineContent(Element ele){
      StringBuffer eleString = new StringBuffer();
      List contentList = ele.getContent();
      for(Iterator iter = contentList.iterator();iter.hasNext();){
       Content content = (Content)iter.next();
       eleString.append(content.getValue()).append(" ");
      }
      return eleString.toString().trim();
 }

这样子,通过调用最上面的readDom方法,返回一个DefaultMutableTreeNode结构的数据,就可以用在<x:tree>中显示了。 



  java开源文档研究struts,webwork,spring,tomcat,jboss,lucense,nutch,JUnit,eclipse......,如果您有什么意见,欢迎评论和留言.
<< < 1 2 3 4 > >> 4/4
[下一篇]用JSF和MyFaces实现文件上载完美.. [上一篇]AJAX框架汇总

评论

称  呼:
内  容:

google

相关栏目

最新文章

热门文章

推荐文章

更多友情链接>>>