0

我正在尝试对搜索容器分页进行 Ajax 调用。由于同一页面上有多个 portlet,我不希望每个 portlet 在每次执行分页时都强制调用渲染。

可能有两种可能的解决方案,但我面临一些问题。请帮我解决它。

1) 你能告诉我如何通过将其 Portlet Life-cycle 从 0 更改为 2 来编辑 Liferay Search Container Pagination URL 吗?如何创建钩子?

2)有一个名为的标签<liferay-ui:page-iterator/>,其中有一个名为jsCall的属性。它用于不重新加载页面的分页。我不知道如何使用它?

如果可以使用第二个选项解决它,那将很有帮助。

谢谢你。

4

2 回答 2

0

是的,我知道如何使用它。

我会给你一个例子来做到这一点:

<portlet:renderURL var="manageRelationsURL"
windowState="<%=LiferayWindowState.NORMAL.toString()%>">
<portlet:param name="action" value="manageRelations" />
</portlet:renderURL>

<%PortletURL iteratorURL = renderResponse.createRenderURL();
iteratorURL.setParameter("action", "manageRelations");
%>

    <%
PortalPreferences portalPrefs = PortletPreferencesFactoryUtil.getPortalPreferences(request);
String orderByCol = ParamUtil.getString(request, "orderByCol");
String orderByType = ParamUtil.getString(request, "orderByType");


if (Validator.isNotNull(orderByCol) && Validator.isNotNull(orderByType)) {
    portalPrefs.setValue("NAME_SPACE", "order-by-col", orderByCol);
    portalPrefs.setValue("NAME_SPACE", "order-by-type", orderByType);

} else {
    orderByCol = portalPrefs.getValue("NAME_SPACE", "order-by-col", "domainLabel");
    orderByType = portalPrefs.getValue("NAME_SPACE", "order-by-type", "asc");

}
 %>
<div style="">
<aui:form>
<liferay-ui:search-container delta="20" iteratorURL="<%=iteratorURL%>" emptyResultsMessage="There were not any match." orderByCol="<%= orderByCol %>" orderByType="<%= orderByType %>">
<liferay-ui:search-form
    page="/WEB-INF/jsp/localAdministration/relations/search.jsp"
    searchContainer="<%= searchContainer %>"
    servletContext="<%= this.getServletConfig().getServletContext() %>"
    showAddButton="true" />
    <liferay-ui:search-container-results>

        <%
        List<RelationInstance> relationList = UtilsAdministration.getRelationListCache(themeDisplay.getUserId(),0, UtilsAdministration.getRelationListCacheSize(themeDisplay.getUserId()));
        Collections.sort(relationList,RelationsComparator.getRelationsOrderByComparator(orderByCol, orderByType));

        results = ListUtil.subList(relationList, searchContainer.getStart(),   
                 searchContainer.getEnd());

           if(relationList.size()<searchContainer.getEnd()){
               results = ListUtil.subList(relationList, searchContainer.getStart(),   
                       relationList.size());
               total = relationList.size();
           }else{
               results = ListUtil.subList(relationList, searchContainer.getStart(),   
                       searchContainer.getEnd());
               total = relationList.size();
           }

           pageContext.setAttribute("results", results);
           pageContext.setAttribute("total", total);
        %>
        </liferay-ui:search-container-results>


    <liferay-ui:search-container-row className="RelationInstance" modelVar="aRelationInstance">
        <liferay-ui:search-container-column-text name="First" value="<%=aRelationInstance.getFirstLabel()%>" orderable="<%= true %>" orderableProperty="domainLabel"/>
        <liferay-ui:search-container-column-text name="Second" value="<%=aRelationInstance.getSecondLabel()%>" orderable="<%= true %>" orderableProperty="relationLabel"/>
        <liferay-ui:search-container-column-text name="Third" value="<%=aRelationInstance.getRangeLabel()%>" orderable="<%= true %>" orderableProperty="rangeLabel"/>
        <liferay-ui:search-container-column-jsp align="right" name="Acciones" path="/WEB-INF/jsp/localAdministration/relations/actionRelationButton.jsp"/>  
    </liferay-ui:search-container-row>
    <liferay-ui:search-iterator />
</liferay-ui:search-container>
</aui:form>
</div>

在这种情况下,我检索列表以从 EhCache 而不是 DB 进行迭代。

IteratorURL 必须包含与您正在调用的页面相同的 URL。

我希望它对你有用。

于 2016-11-16T11:28:18.250 回答
0

卡纳哈拉,

每次我遇到这个问题时,我都必须手动实现分页,因为搜索容器确实是嵌入的,可以由开发人员修改。

也许可以解决这个问题,但不确定它是否存在。为此,您将花费更少的时间创建自己的分页。

我希望它可以帮助你。

最好的祝愿

于 2016-11-02T11:32:30.970 回答