基于myFaces的JSF技术使用中的一些经验(三)[godroad原创]--使用myFaces的建立一个xml文件的树形表示
2006-04-13 17:02
507 查看
在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>中显示了。
本来,这个标签的出现很容易让人联想到是为了显示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>中显示了。
相关文章推荐
- 基于myFaces的JSF技术使用中的一些经验(三)[godroad原创]--使用myFaces的建立一个xml文件的树形表示
- 基于myFaces的JSF技术使用中的一些经验(一)[godroad原创]--乱码的处理
- 基于myFaces的JSF技术使用中的一些经验(一)[godroad原创]--乱码的处理
- 基于myFaces的JSF技术使用中的一些经验(二)[godroad原创]--dataTable的使用
- 基于myFaces的JSF技术使用中的一些经验(二)[godroad原创]--dataTable的使用
- 【原创】关于友善ARM11 tiny6410 的一些使用经验
- 【C语言】建立一个数组存储学生的学号、姓名和三门课程成绩和平均成绩【原创技术】
- 使用文件流写Xml文件时得到的一个小经验
- 去年5月份,公司项目较少,我就组织了一个用于公司内部办公管理的项目(以下称OA)。第一个目的是为了让公司里面一些技术较差的人员得到真正编程的锻炼;第二个目的是为了使用空闲的人员为公司开发一个产品,在内
- [转]使用CPPUNIT如何建立一个基于MFC的GUI测试框架
- LINQ下使用三层架构的探索(四)建立一个逻辑访问层,并且添加一些查询方法
- 使用文件流写Xml文件时得到的一个小经验 .
- 【原创】使用Kettle的一些心得和经验
- 使用visual studio 2013建立一个基于QPC的简单工程
- 【C++】建立一个学生信息链表,每个结点包括:学号、姓名、成绩。【原创技术】
- 简单的使用自动化技术实现用WORD读取一个XML文件的过程~
- 使用容器技术来建立一个微服务架构
- 使用CPPUNIT如何建立一个基于MFC的GUI测试框架
- Fileatream表示文件流,它能够打开和关闭文件,并对文件进行单字节的读写操作。 StreamReader和StreamWriter以文本方式对流进行读写操作。建立一个文本文件,分别使用上面两种方
- 建立一个更高级别的查询 API:正确使用Django ORM 的方式 - 技术翻译 - 开源中国 OSChina.NET