愚昧如我,今天稍微接觸到頁籤(tabs)跟search container的關係,在此紀錄一下。
<%
if(courseListBySearch != null){
List<course_> list = ListUtil.subList(courseListBySearch, searchContainer.getStart(), searchContainer.getEnd());
Collections.sort(list, orderByComparator);
results = list;
total = courseListBySearch.size();
pageContext.setAttribute("results", results);
pageContext.setAttribute("total", total);
}
%>
要使用search container,我們必須先給他一個list,可是這個list在container移往下一頁之後,便會重整頁面導致剛才輸入的搜尋條件都消失。
如果在頁籤底下更是會跑回第一頁,所以我們必須把處理過後的list放到上面這個叫做ListUtil.subList裡面,courseListBySearch就是處理過後的List。
這麼做的話,即使切換下一頁,所呈現出來的值還是正常的。
當然為了配合頁籤,還得加入以下;
<%
PortletURL itrURL = renderResponse.createRenderURL();
itrURL.setParameter("tabs1", "新增子分類");
%>
然後於<liferay-ui:search-container emptyResultsMessage="沒有找到圖片資料夾" delta="5" ">標籤中加上iteratorURL="<%=itrURL %>
這樣的話,就可以讓網頁記住我們剛才做的動作。
當然,有時候網頁還要配合搜尋的功能,這時候也是要把參數加在itrURL裡面。
還有一個問題,如果setParameter給的是參數,如;
String courseAssortId = renderRequest.getParameter("assortType");
抓到以上的字串想放進itrURL中的話,必須要做判斷;
if(courseAssortId == null){
courseAssortId="";
}
總之就是避免它有null值,否則會發生例外。
iteratorURL.setParameter("assortType", courseAssortId);
最後在像上面這樣指定給itr就可以用了。
