有關於search-container這個好用的tag,在這裡稍微做點筆記。
首先我們需要從資料庫中叫出資料,所以需要於JSP內叫出所需要的資料表物件;
<liferay-ui:search-container emptyResultsMessage="no-users-were-found" delta="10">
第一行是設定search-container的屬性。
<liferay-ui:search-container-results>
<%
results = course_LocalServiceUtil.getcourse_s(searchContainer.getStart(), searchContainer.getEnd());
total = course_LocalServiceUtil.getcourse_sCount();
pageContext.setAttribute("results", results);
pageContext.setAttribute("total", total);
%>
</liferay-ui:search-container-results>
results便是我們要帶入的資料表,可以使用liferay內LocalServiceUtil的方法來抓出整張表。
但這裡也可自訂,例如我只需要UserID where age > 20這種年紀小於某部分的使用者,可以在LocalServiceImpl這類的Java檔中加上;
public List<course_Assort> dynamicQuerySortByParent(String keyWord) throws SystemException{
DynamicQuery query = DynamicQueryFactoryUtil.forClass(course_Assort.class);
if(Validator.isNotNull(keyWord)){
long pid = 0;
//query.add(PropertyFactoryUtil.forName("parentId").ne("%"+keyWord+"%")); //這邊相當於sql碼的like,.ne是not equal的意思。
query.add(PropertyFactoryUtil.forName("parentId").ne(pid));
}
query.addOrder(OrderFactoryUtil.desc("courseAssortId"));
return dynamicQuery(query,-1,-1);
}
有了以上的自訂方法後,只要在result裡放入dynamicQuerySortByParent,就可以抓出自己想要的list。
total是要抓出總共有幾筆資料,只需要呼叫抓數量的方法就好。
接下來這行非常重要
<liferay-ui:search-container-row className="com.isu.ocw.model.course_"
keyProperty="courseId"
modelVar="course_"
escapedModel="<%=true %>"
>
className就是你資料表的名稱,在model後填入該table名稱就好,keyProperty就是主鍵。
modelVar其實是可以自訂欄位內容的物件,例如我做這部分的範例時,我是要用course_這個資料表中的一個id去抓另一個資料表的資料
這時候我們就可以
<%course_Assort ca= course_AssortLocalServiceUtil.getcourse_Assort(course_.getCourseAssortId()); %>
在這宣告一個想要用的資料表物件,然後參數便可以用modelVar填,在這裡我是把類別ID當參數放入
<liferay-ui:search-container-column-text
name="學院類別"
value="<%=ca.getAssortType() %>"
orderable="<%=true %>"
/>
而這邊就是欄位內的東西了,name是表頭,value是我想要顯示的其他欄位資料,若不需此功能只要改填property="資料表欄位名稱"即可。
若想在最後一欄加上一個liferay自定的按鈕
<liferay-ui:search-container-column-jsp
align="center" path="/html/isu_ocw_courseAssort/course_assort_action.jsp" name="" />
</liferay-ui:search-container-row>
這樣就可以加入了,當然action.jsp要自己寫
<liferay-ui:search-iterator
paginate="true"
/>
</liferay-ui:search-container>
最後加入以上,search-container的基本功能就到此,若無錯誤應可正常顯示。
*以下是action.jsp
<portlet:renderURL var="closeURL">
</portlet:renderURL>
<liferay-ui:icon-menu message="ocw.courseAdmin.actionDisplay" align="right">
<%
ResultRow row = (ResultRow) request.getAttribute(WebKeys.SEARCH_CONTAINER_RESULT_ROW);
course_ course = (course_)row.getObject();
String courseId = String.valueOf(course.getCourseAssortId());
%>
<portlet:renderURL var="videoUpdateURL">
<portlet:param name="mvcPath" value="/html/isu_ocw_admin/admin_video_update.jsp" />
<portlet:param name="courseId" value="<%=String.valueOf(course.getCourseId()) %>" />
</portlet:renderURL>
<portlet:actionURL var="deleteURL" name="deleteVideo">
<portlet:param name="delete" value="<%=String.valueOf(course.getCourseId())%>"/>
</portlet:actionURL>
<liferay-ui:icon image="edit" url="<%=videoUpdateURL.toString() %>" />
<liferay-ui:icon-delete url="<%=deleteURL.toString() %>" />
<%--
<liferay-ui:icon-deactivate url="#" />
--%>
</liferay-ui:icon-menu>