项目中为方便用户在添加上传文件时选择自己想要保存到的文件夹,着手写了一个程序实现遍历数据库中所有的文件夹而形成有层次感的下拉列表,涉及到的代码基本如下:
首先介绍下表结构:
必须有的字段有:folderId, parentFolderId, folderName
/** *//**
* 用于形成菜单式下拉列表的字符串拼接方法
*
* @param wpFolderId 文件夹ID
* @param groupId 社区ID
* @param menuList 返回的菜单式下拉列表的拼接List
* @param str 用来区分不同级的文件夹的静态字符串
* @return
* @throws SystemException
*/
public static List getFolderMenu(long wpFolderId, long groupId, List menuList, String str)
throws SystemException{
//首先查出第一级的所有文件夹对象
List rootList=LogFolderLocalServiceUtil.getFolders(groupId, wpFolderId);
//定义一个空的日志文件夹对象
LogFolder logFolder = null;
//循环处理用于页面显示的文件夹名称列表
for(int i=0;i<rootList.size();i++){
logFolder=(LogFolder)rootList.get(i);
//设置文件夹名称为:文件夹名称加一静态字符串(初始为空)
logFolder.setWpFolderName(str+logFolder.getWpFolderName());
//往List里面添加数据对象
menuList.add(logFolder);
//取得下一级文件夹的文件夹ID(也即将当前文件夹的ID作为下一级文件夹的父文件夹ID)
long subWpFolderId=((LogFolder)rootList.get(i)).getWpFolderId();
//如果有下一级文件夹则递归调用该方法实现遍历所有文件夹
getFolderMenu(subWpFolderId,groupId,menuList,str+" ");
}
return menuList;
}
在Action中通过调用此业务方法,得到最终拼接好的String串List,通过req.setAttribute("folderList", list); 在页面上将此List取出进行循环读出,则可以产生出菜单式的列表,JSP代码如下:
1<tr>
2 <td>
3 <liferay-ui:message key="日志文件夹选择" />
4 </td>
5 <td>
6 <select name="<portlet:namespace />selFolderId">
7 <option value=""></option>
8
9 <%
10 for (int i = 0; i < FList.size(); i++) {
11 LogFolder mt = (LogFolder)FList.get(i);
12 %>
13
14 <option <%= selFolderId == String.valueOf(mt.getWpFolderId()) ? "selected" : "" %> value="<%= String.valueOf(mt.getWpFolderId()) %>"><%= mt.getWpFolderName() %></option>
15
16 <%
17 }
18 %>
19
20 </select>
21 </td>
22</tr>
我这是在一个Liferay项目中代码,在其他Web开发中应该方法类似,如果表结构相似,改起来应该比较方便。有任何疑问可以留言交流,包括Liferay技术。
posted on 2007-07-19 17:34
Scott.Pan 阅读(682)
评论(0) 编辑 收藏 所属分类:
Liferay