为什么不看他自带的demo呢?http://livedemo.exadel.com/richfaces-demo/richfaces/tree.jsf
解决方案 »
- Jboss7调用EJB3.0问题
- Spring与struts2不配合要怎么整 呢??
- 急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急。。。。。报错啊,高分求解啊
- 【高手请进,打酱油的去超市】润乾报表调用java方法
- 请各位高手帮忙,EJB 3.0有关EntityManager的merge方法
- 表单问题
- CBX RIA:面向大型数据库关键领域的RIA开发框架
- 怎么使用ajax在jsp中动态加载一个applet
- column是数字的问题(wabacus)
- Ant 的问题,挺奇怪的,大家看看。
- 问个Struts2的问题...很烦很不爽
- 关于pager-taglib 分页的问题求教!!
下面是一段代码
public class Library implements TreeNode {
/**
*
*/
private static final long serialVersionUID = -3530085227471752526L;
private Map artists = null;
private Object state1;
private Object state2; private Map getArtists() {
if (this.artists==null) {
initData();
}
return this.artists;
}
public void addArtist(Artist artist) {
addChild(Long.toString(artist.getId()), artist);
}
public void addChild(Object identifier, TreeNode child) {
getArtists().put(identifier, child);
child.setParent(this);
} public TreeNode getChild(Object id) {
return (TreeNode) getArtists().get(id);
} public Iterator getChildren() {
return getArtists().entrySet().iterator();
} public Object getData() {
return this;
} public TreeNode getParent() {
return null;
} public boolean isLeaf() {
return getArtists().isEmpty();
} public void removeChild(Object id) {
getArtists().remove(id);
} public void setData(Object data) {
} public void setParent(TreeNode parent) {
} public String getType() {
return "library";
}
private long nextId = 0;
private long getNextId() {
return nextId++;
}
private Map albumCache = new HashMap();
private Map artistCache = new HashMap();
private Artist getArtistByName(String name, Library library) {
Artist artist = (Artist)artistCache.get(name);
if (artist==null) {
artist = new Artist(getNextId());
artist.setName(name);
artistCache.put(name, artist);
library.addArtist(artist);
}
return artist;
}
private Album getAlbumByTitle(String title, Artist artist) {
Album album = (Album)albumCache.get(title);
if (album==null) {
album = new Album(getNextId());
album.setTitle(title);
albumCache.put(title, album);
artist.addAlbum(album);
}
return album;
}
private void initData() {
artists = new HashMap();
InputStream is = this.getClass().getClassLoader().getResourceAsStream("org/richfaces/demo/tree/data.txt");
ByteArrayOutputStream os = new ByteArrayOutputStream();
byte[] rb = new byte[1024];
int read;
try {
do {
read = is.read(rb);
if (read>0) {
os.write(rb, 0, read);
}
} while (read>0);
String buf = os.toString();
StringTokenizer toc1 = new StringTokenizer(buf,"\n");
while (toc1.hasMoreTokens()) {
String str = toc1.nextToken();
StringTokenizer toc2 = new StringTokenizer(str, "\t");
String songTitle = toc2.nextToken();
String artistName = toc2.nextToken();
String albumTitle = toc2.nextToken();
toc2.nextToken();
toc2.nextToken();
String albumYear = toc2.nextToken();
Artist artist = getArtistByName(artistName,this);
Album album = getAlbumByTitle(albumTitle, artist);
album.setYear(new Integer(albumYear));
Song song = new Song(getNextId());
song.setTitle(songTitle);
album.addSong(song);
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public Object getState1() {
return state1;
}
public void setState1(Object state1) {
this.state1 = state1;
}
public Object getState2() {
return state2;
}
public void setState2(Object state2) {
this.state2 = state2;
}
public void walk(TreeNode node, List<TreeNode> appendTo, Class<? extends TreeNode> type) {
if (type.isInstance(node)){
appendTo.add(node);
}
Iterator<Map.Entry<Object, TreeNode>> iterator = node.getChildren();
while(iterator.hasNext()) {
walk(iterator.next().getValue(), appendTo, type);
}
}
public ArrayList getLibraryAsList(){
ArrayList appendTo = new ArrayList();
walk(this, appendTo, Song.class);
return appendTo;
}
} <h:form>
<rich:tree switchType="client" style="width:300px" value="#{library.data}" var="item" nodeFace="#{item.type}">
<rich:treeNode type="artist" iconLeaf="/images/tree/singer.gif" icon="/images/tree/singer.gif">
<h:outputText value="#{item.name}" />
</rich:treeNode>
<rich:treeNode type="album" iconLeaf="/images/tree/disc.gif" icon="/images/tree/disc.gif">
<h:outputText value="#{item.title}" />
</rich:treeNode>
<rich:treeNode type="song" iconLeaf="/images/tree/song.gif" icon="/images/tree/song.gif">
<h:outputText value="#{item.title}" />
</rich:treeNode>
</rich:tree>
</h:form>