項目中為方便用戶在添加上傳文件時選擇自己想要保存到的文件夾,著手寫了一個程序實現遍歷數據庫中所有的文件夾而形成有層次感的下拉列表,涉及到的代碼基本如下:
首先介紹下表結構:
必須有的字段有: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 閱讀(691)
評論(0) 編輯 收藏 所屬分類:
Liferay