当前位置: 首页 > 知识库问答 >
问题:

生命的UI:搜索切换不显示(在搜索表单)

盖诚
2023-03-14

我正在尝试为我的portlet创建一个搜索表单。portlet是一个地址簿应用程序,所有dao和服务都是使用service builder构建的。我想为用户提供一个基本/高级搜索表单(与liferay上的其他表单一样,例如control center中的“用户和组织”)。

我已经实现了所有的逻辑和页面,查看了Lifeay源代码(6.1 GA1),但搜索表单没有以任何方式显示,我将把代码放在这里。

在视图中。jsp:

<%
PortletURL portletURL = renderResponse.createRenderURL();
portletURL.setParameter("jspPage", "/html/addressbookportlet/view.jsp");
pageContext.setAttribute("portletURL", portletURL);
String portletURLString = portletURL.toString();
%>

<aui:form action="<%= portletURLString %>" method="get" name="fm">
    <liferay-portlet:renderURLParams varImpl="portletURL" />
    <aui:input name="isSearch" type="hidden" value="true" />
    <aui:input name="redirect" type="hidden" value="<%= portletURLString %>" />

    <liferay-ui:search-container 
        searchContainer="<%= new ABContactSearch(renderRequest, portletURL) %>"
    >

        <% 
        ABContactDisplayTerms displayTerms = (ABContactDisplayTerms)searchContainer.getDisplayTerms();
        ABContactSearchTerms searchTerms = (ABContactSearchTerms)searchContainer.getSearchTerms();

        Long societyId = GetterUtil.getLong(searchTerms.getSocietyId(),0);
        Long contactTypeId = GetterUtil.getLong(searchTerms.getContactTypeId(), 0);
        Long brandId = GetterUtil.getLong(searchTerms.getBrandId(),0);
        Long channelId = GetterUtil.getLong(searchTerms.getChannelId(),0);
        %>

        <liferay-ui:search-form 
            searchContainer="<%=searchContainer%>" 
            servletContext="<%= this.getServletConfig().getServletContext() %>" 
            showAddButton="true"
            page='<%= request.getContextPath() + "/html/addressbookportlet/contact_search_form.jsp" %>'
        />

        <liferay-ui:search-container-results>
            <%

                if (searchTerms.isAdvancedSearch()) {
                    results = AddressbookSearchUtil.searchAdvanced(scopes, searchTerms, searchTerms.isAndOperator(), searchContainer.getStart(), searchContainer.getEnd()); //, searchContainer.getOrderByComparator());
                    total = AddressbookSearchUtil.countAdvanced(scopes, searchTerms, searchTerms.isAndOperator());
                }
                else {
                    results = AddressbookSearchUtil.searchFullText(scopes, searchTerms.getKeywords(), searchContainer.getStart(), searchContainer.getEnd()); //, searchContainer.getOrderByComparator());
                    total = AddressbookSearchUtil.countFullText(scopes, searchTerms.getKeywords());
                }
                pageContext.setAttribute("results", results);
                pageContext.setAttribute("total", total);
            %>

        </liferay-ui:search-container-results>

        <liferay-ui:search-container-row
            className="it.mir4unicomm.addressbook.model.ABContact"
            escapedModel="<%= true %>"
            keyProperty="contactId"
            modelVar="abcontact"
        >

            <liferay-ui:search-container-column-text 
                title="Surname"
                property="surname"
            />

            <liferay-ui:search-container-column-text 
                title="Name"
                property="name"
            />

            <liferay-ui:search-container-column-text 
                title="Position"
                property="position"
            />

        </liferay-ui:search-container-row>

        <liferay-ui:search-iterator />
    </liferay-ui:search-container>
</aui:form>

contact_search_form.jsp:

<%@ include file="/html/addressbookportlet/init.jsp" %>

<%
the
ABContactDisplayTerms displayTerms = (ABContactDisplayTerms)searchContainer.getDisplayTerms();

List<ABSociety> societyList = ABSocietyLocalServiceUtil.getABSocieties(0, Integer.MAX_VALUE);
List<ABBrand> brandList = ABBrandLocalServiceUtil.getABBrands(0, Integer.MAX_VALUE);
List<ABContactType> contactTypeList = ABContactTypeLocalServiceUtil.getABContactTypes(0, Integer.MAX_VALUE);
List<ABChannel> channelList = ABChannelLocalServiceUtil.getABChannels(0, Integer.MAX_VALUE);
%>

<liferay-ui:search-toggle
    id="toggle_id_contact_search"
    displayTerms="<%= displayTerms %>"
    buttonLabel="search-contact"
>
    <aui:fieldset>

        <aui:input name="<%= ABContactDisplayTerms.SURNAME %>" size="20" value="<%= displayTerms.getSurname() %>" />

        <aui:input name="<%= ABContactDisplayTerms.NAME %>" size="20" value="<%= displayTerms.getName() %>" />

        <aui:input name="<%= ABContactDisplayTerms.POSITION %>" size="20" value="<%= displayTerms.getPosition() %>" />

        <aui:input name="<%= ABContactDisplayTerms.DETAIL_VALUE %>" size="20" value="<%= displayTerms.getDetailValue() %>" />

    </aui:fieldset>
</liferay-ui:search-toggle>

<c:if test="<%= windowState.equals(WindowState.MAXIMIZED) %>">
    <aui:script>
        Liferay.Util.focusFormField(document.<portlet:namespace />fm.<portlet:namespace /><%= ABContactDisplayTerms.SURNAME %>);
        Liferay.Util.focusFormField(document.<portlet:namespace />fm.<portlet:namespace /><%= ABContactDisplayTerms.KEYWORDS %>);
    </aui:script>
</c:if>meDisplay.setIncludeServiceJs(true);
ABContactSearch searchContainer = (ABContactSearch)request.getAttribute("liferay-ui:search:searchContainer");

erm.java:

public class ABContactDisplayTerms extends DisplayTerms {

    public static final String NAME = "name";

    public static final String SURNAME = "surname";

    public static final String POSITION = "position";

    public static final String SOCIETY_ID = "societyId";

    public static final String CONTACT_TYPE_ID = "contactTypeId";

    public static final String BRAND_ID = "brandId";

    public static final String CHANNEL_ID = "channelId";

    public static final String DETAIL_VALUE = "detailValue";


    protected String name;
    protected String surname;
    protected String position;
    protected Long societyId;
    protected Long contactTypeId;
    protected Long brandId;
    protected Long channelId;
    protected String detailValue;

    public ABContactDisplayTerms(PortletRequest portletRequest) {
        super(portletRequest);

        name = ParamUtil.getString(portletRequest, NAME);
        surname = ParamUtil.getString(portletRequest, SURNAME);
        position = ParamUtil.getString(portletRequest, POSITION);
        societyId = ParamUtil.getLong(portletRequest, SOCIETY_ID);
        contactTypeId = ParamUtil.getLong(portletRequest, CONTACT_TYPE_ID);
        brandId = ParamUtil.getLong(portletRequest, BRAND_ID);
        channelId = ParamUtil.getLong(portletRequest, CHANNEL_ID);
        detailValue = ParamUtil.getString(portletRequest, DETAIL_VALUE);
    }


    public String getName() {
        return name;
    }

    public String getSurname() {
        return surname;
    }

    public String getPosition() {
        return position;
    }

    public Long getSocietyId() {
        return societyId;
    }

    public Long getContactTypeId() {
        return contactTypeId;
    }

    public Long getBrandId() {
        return brandId;
    }

    public Long getChannelId() {
        return channelId;
    }

    public String getDetailValue() {
        return detailValue;
    }

}

最后ABContactSearch。JAVA

public class ABContactSearch extends SearchContainer<ABContact> {

    private static Log _log = LogFactoryUtil.getLog(ABContactSearch.class);

    static List<String> headerNames = new ArrayList<String>();
    static Map<String, String> orderableHeaders = new HashMap<String, String>();

    static {
        headerNames.add("name");
        headerNames.add("surname");
        headerNames.add("position");
        headerNames.add("society");
        headerNames.add("contact-type");
        headerNames.add("channel");
        headerNames.add("brand");
        headerNames.add("detail-value");

        orderableHeaders.put("name", "name");
        orderableHeaders.put("surname", "surname");
        orderableHeaders.put("society", "society");
        orderableHeaders.put("contact-type", "contact-type");
    }

    public static final String EMPTY_RESULTS_MESSAGE = "no-contacts-were-found";


    public ABContactSearch(PortletRequest portletRequest, PortletURL iteratorURL) {
        super(
            portletRequest, new ABContactDisplayTerms(portletRequest),
            new ABContactSearchTerms(portletRequest), DEFAULT_CUR_PARAM,
            DEFAULT_DELTA, iteratorURL, headerNames, EMPTY_RESULTS_MESSAGE);

        ABContactDisplayTerms displayTerms = (ABContactDisplayTerms)getDisplayTerms();

        iteratorURL.setParameter(
                ABContactDisplayTerms.NAME, displayTerms.getName());
        iteratorURL.setParameter(
                ABContactDisplayTerms.SURNAME, displayTerms.getSurname());
        iteratorURL.setParameter(
                ABContactDisplayTerms.POSITION, displayTerms.getPosition());
        iteratorURL.setParameter(
                ABContactDisplayTerms.DETAIL_VALUE, displayTerms.getDetailValue());
        iteratorURL.setParameter(
                ABContactDisplayTerms.SOCIETY_ID, String.valueOf(displayTerms.getSocietyId()));
        iteratorURL.setParameter(
                ABContactDisplayTerms.CONTACT_TYPE_ID, String.valueOf(displayTerms.getContactTypeId()));
        iteratorURL.setParameter(
                ABContactDisplayTerms.BRAND_ID, String.valueOf(displayTerms.getBrandId()));
        iteratorURL.setParameter(
                ABContactDisplayTerms.CHANNEL_ID, String.valueOf(displayTerms.getChannelId()));

        try {
            String orderByCol = ParamUtil.getString(
                portletRequest, "orderByCol", "surname");
            String orderByType = ParamUtil.getString(
                portletRequest, "orderByType", "asc");

//          OrderByComparator orderByComparator =
//              UsersAdminUtil.getUserOrderByComparator(
//                  orderByCol, orderByType);

            setOrderableHeaders(orderableHeaders);
            setOrderByCol(orderByCol);
            setOrderByType(orderByType);
//          setOrderByComparator(orderByComparator);
        }
        catch (Exception e) {
            _log.error(e.getMessage());
            _log.debug(e.getMessage(), e);
        }
    }

}

搜索容器本身运行良好,因为默认情况下使用空字符串执行基本搜索,但“搜索表单”未显示。我尝试在contact_search_form.jsp上放置一些调试消息,但没有一条打印到控制台中。标签库似乎没有找到或处理该文件。

任何帮助都将不胜感激!

共有2个答案

拓拔谭三
2023-03-14

把你的代码放进去

<aui:form action="<%= portletURL.toString() %>" method="post" name="yourForm">
</aui:form>
杜彦君
2023-03-14

我的100%工作示例,其中使用liferay ui:搜索容器、liferay ui:搜索表单和liferay ui:搜索切换:

我的100%工作示例,其中使用liferay ui:搜索容器、liferay ui:搜索表单和liferay ui:搜索切换:视图。jsp:

<%@ include file="/init.jsp" %>


<%
PortletURL portletURL = renderResponse.createRenderURL();
portletURL.setParameter("mvcPath", "/html/view.jsp");
pageContext.setAttribute("portletURL", portletURL);

%>  

<aui:form name="searchForm" action="<%= portletURL.toString() %>" method="post">

    <liferay-ui:search-container searchContainer="<%= new UserSearch(renderRequest, portletURL) %>" >
        <aui:input disabled="<%= true %>" name="usersRedirect" type="hidden" value="<%= portletURL.toString() %>" />

        <%
        UserSearchTerms searchTerms = (UserSearchTerms)searchContainer.getSearchTerms();
        UserDisplayTerms displayTerms = (UserDisplayTerms)searchContainer.getDisplayTerms();

        long organizationId = searchTerms.getOrganizationId();
        long userGroupId = searchTerms.getUserGroupId();

        Organization organization = null;

        if (organizationId > 0) {
            try {
                organization = OrganizationLocalServiceUtil.getOrganization(organizationId);
            }
            catch (NoSuchOrganizationException nsoe) {
            }
        }

        UserGroup userGroup = null;

        if (userGroupId > 0) {
            try {
                userGroup = UserGroupLocalServiceUtil.getUserGroup(userGroupId);
            }
            catch (NoSuchUserGroupException nsuge) {
            }
        }
        %>

        <c:if test="<%= organization != null %>">
            <aui:input name="<%= UserDisplayTerms.ORGANIZATION_ID %>" type="hidden" value="<%= organization.getOrganizationId() %>" />

            <h3><%= HtmlUtil.escape(LanguageUtil.format(pageContext, "users-of-x", organization.getName())) %></h3>
        </c:if>

        <c:if test="<%= userGroup != null %>">
            <aui:input name="<%= UserDisplayTerms.USER_GROUP_ID %>" type="hidden" value="<%= userGroup.getUserGroupId() %>" />

            <h3><%= LanguageUtil.format(pageContext, "users-of-x", HtmlUtil.escape(userGroup.getName())) %></h3>
        </c:if>


        <liferay-ui:search-form
            page="/html/user_search.jsp"
            searchContainer="<%= searchContainer %>"
            servletContext="<%= this.getServletConfig().getServletContext() %>"
        />


        <%
        LinkedHashMap userParams = new LinkedHashMap();

        if (organizationId > 0) {
            userParams.put("usersOrgs", new Long(organizationId));
        }

        if (userGroupId > 0) {
            userParams.put("usersUserGroups", new Long(userGroupId));
        }
        %>

        <liferay-ui:search-container-results>
            <c:choose>
                <c:when test="<%= GetterUtil.getBoolean(PropsUtil.get(PropsKeys.USERS_INDEXER_ENABLED)) && GetterUtil.getBoolean(PropsUtil.get(PropsKeys.USERS_SEARCH_WITH_INDEX)) %>">
                    <%@ include file="/html/user_search_results_index.jspf" %>
                </c:when>
                <c:otherwise>
                    <%@ include file="/html/user_search_results_database.jspf" %>
                </c:otherwise>
            </c:choose>
        </liferay-ui:search-container-results>

        <liferay-ui:search-container-row
            className="com.liferay.portal.model.User"
            escapedModel="<%= true %>"
            keyProperty="userId"
            modelVar="curUser"
            rowIdProperty="screenName"
        >
            <liferay-portlet:renderURL varImpl="rowURL" windowState="<%= WindowState.MAXIMIZED.toString() %>">
                <portlet:param name="mvcPath" value="/html/user_display.jsp" />
                <portlet:param name="redirect" value="<%= searchContainer.getIteratorURL().toString() %>" />
                <portlet:param name="userId" value="<%= String.valueOf(curUser.getUserId()) %>" />
            </liferay-portlet:renderURL>

            <%@ include file="/html/search_columns.jspf" %>
        </liferay-ui:search-container-row>

        <c:if test="<%= (organization != null) || (userGroup != null) %>">
            <br />
        </c:if>

        <c:if test="<%= organization != null %>">
            <aui:input name="<%= UserDisplayTerms.ORGANIZATION_ID %>" type="hidden" value="<%= organization.getOrganizationId() %>" />

            <liferay-ui:message key="filter-by-organization" />: <%= HtmlUtil.escape(organization.getName()) %><br />
        </c:if>

        <c:if test="<%= userGroup != null %>">
            <aui:input name="<%= UserDisplayTerms.USER_GROUP_ID %>" type="hidden" value="<%= userGroup.getUserGroupId() %>" />

            <liferay-ui:message key="filter-by-user-group" />: <%= HtmlUtil.escape(userGroup.getName()) %><br />
        </c:if> 

        <div class="separator"><!-- --></div>

        <liferay-ui:search-iterator />
    </liferay-ui:search-container>
</aui:form>

user\u搜索。jsp:

<%@ include file="/init.jsp" %>

<%
UserSearch searchContainer = (UserSearch)request.getAttribute("liferay-ui:search:searchContainer");

UserDisplayTerms displayTerms = (UserDisplayTerms)searchContainer.getDisplayTerms();
%>

<liferay-ui:search-toggle
    buttonLabel="search"
    displayTerms="<%= displayTerms %>"
    id="toggle_id_user_search"
>
    <aui:fieldset>
        <aui:input name="<%= displayTerms.FIRST_NAME %>" size="20" type="text" value="<%= displayTerms.getFirstName() %>" />

        <aui:input name="<%= displayTerms.MIDDLE_NAME %>" size="20" type="text" value="<%= displayTerms.getMiddleName() %>" />

        <aui:input name="<%= displayTerms.LAST_NAME %>" size="20" type="text" value="<%= displayTerms.getLastName() %>" />

        <aui:input name="<%= displayTerms.SCREEN_NAME %>" size="20" type="text" value="<%= displayTerms.getScreenName() %>" />

        <aui:input name="<%= displayTerms.EMAIL_ADDRESS %>" size="20" type="text" value="<%= displayTerms.getEmailAddress() %>" />
    </aui:fieldset>
</liferay-ui:search-toggle>

user\u search\u results\u索引。jspf:

<%@ page import="com.liferay.portal.kernel.search.Hits" %>
<%@ page import="com.liferay.portal.kernel.search.Sort" %>
<%@ page import="com.liferay.portal.kernel.search.SortFactoryUtil" %>
<%@ page import="com.liferay.portlet.usersadmin.util.UsersAdminUtil" %>

<%
userParams.put("expandoAttributes", searchTerms.getKeywords());

Sort sort = SortFactoryUtil.getSort(User.class, searchContainer.getOrderByCol(), searchContainer.getOrderByType());

while (true) {
    Hits hits = null;

    if (searchTerms.isAdvancedSearch()) {
        hits = UserLocalServiceUtil.search(company.getCompanyId(), searchTerms.getFirstName(), searchTerms.getMiddleName(), searchTerms.getLastName(), searchTerms.getScreenName(), searchTerms.getEmailAddress(), searchTerms.getStatus(), userParams, searchTerms.isAndOperator(), searchContainer.getStart(), searchContainer.getEnd(), sort);
    }
    else {
        hits = UserLocalServiceUtil.search(company.getCompanyId(), searchTerms.getKeywords(), searchTerms.getStatus(), userParams, searchContainer.getStart(), searchContainer.getEnd(), sort);
    }

    Tuple tuple = UsersAdminUtil.getUsers(hits);

    boolean corruptIndex = (Boolean)tuple.getObject(1);

    if (!corruptIndex) {
        results = (List<User>)tuple.getObject(0);
        total = hits.getLength();

        break;
    }
}

pageContext.setAttribute("results", results);
pageContext.setAttribute("total", total);
%>

user_search_results_database.jspf:

<%
if (searchTerms.isAdvancedSearch()) {
    results = UserLocalServiceUtil.search(company.getCompanyId(), searchTerms.getFirstName(), searchTerms.getMiddleName(), searchTerms.getLastName(), searchTerms.getScreenName(), searchTerms.getEmailAddress(), searchTerms.getStatus(), userParams, searchTerms.isAndOperator(), searchContainer.getStart(), searchContainer.getEnd(), searchContainer.getOrderByComparator());
    total = UserLocalServiceUtil.searchCount(company.getCompanyId(), searchTerms.getFirstName(), searchTerms.getMiddleName(), searchTerms.getLastName(), searchTerms.getScreenName(), searchTerms.getEmailAddress(), searchTerms.getStatus(), userParams, searchTerms.isAndOperator());
}
else {
    results = UserLocalServiceUtil.search(company.getCompanyId(), searchTerms.getKeywords(), searchTerms.getStatus(), userParams, searchContainer.getStart(), searchContainer.getEnd(), searchContainer.getOrderByComparator());
    total = UserLocalServiceUtil.searchCount(company.getCompanyId(), searchTerms.getKeywords(), searchTerms.getStatus(), userParams);
}

pageContext.setAttribute("results", results);
pageContext.setAttribute("total", total);
%> 

user_display.jsp:

<%@ include file="/init.jsp" %>

<%
String backURL = ParamUtil.getString(request, "redirect");

portletDisplay.setURLBack(backURL);

long userId = ParamUtil.getLong(request, "userId");
%>

<liferay-ui:user-display
    displayStyle="<%= 2 %>"
    userId="<%= userId %>"
/>

search\u列。jspf:

<liferay-ui:search-container-column-text
    href="<%= rowURL %>"
    name="first-name"
    orderable="<%= true %>"
    property="firstName"
/>

<liferay-ui:search-container-column-text
    href="<%= rowURL %>"
    name="last-name"
    orderable="<%= true %>"
    property="lastName"
/>

<liferay-ui:search-container-column-text
    href="<%= rowURL %>"
    name="screen-name"
    orderable="<%= true %>"
    property="screenName"
/>

<liferay-ui:search-container-column-text
    href="<%= rowURL %>"
    name="organizations"
>
    <liferay-ui:write bean="<%= curUser %>" property="organizations" />
</liferay-ui:search-container-column-text>

用户搜索。java:

package kz.b2e.kudos.portal.searchuser.search;

import com.liferay.portal.kernel.dao.search.SearchContainer;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.util.JavaConstants;
import com.liferay.portal.kernel.util.OrderByComparator;
import com.liferay.portal.kernel.util.ParamUtil;
import com.liferay.portal.kernel.util.Validator;
import com.liferay.portal.kernel.workflow.WorkflowConstants;
import com.liferay.portal.model.User;
import com.liferay.portal.util.PortletKeys;
import com.liferay.portlet.PortalPreferences;
import com.liferay.portlet.PortletPreferencesFactoryUtil;
import com.liferay.portlet.usersadmin.util.UsersAdminUtil;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.portlet.PortletConfig;
import javax.portlet.PortletRequest;
import javax.portlet.PortletURL;


public class UserSearch extends SearchContainer<User> {

    static List<String> headerNames = new ArrayList<String>();
    static Map<String, String> orderableHeaders = new HashMap<String, String>();

    static {
        headerNames.add("first-name");
        headerNames.add("last-name");
        headerNames.add("screen-name");
        //headerNames.add("email-address");
        headerNames.add("job-title");
        headerNames.add("organizations");

        orderableHeaders.put("first-name", "first-name");
        orderableHeaders.put("last-name", "last-name");
        orderableHeaders.put("screen-name", "screen-name");
        //orderableHeaders.put("email-address", "email-address");
        orderableHeaders.put("job-title", "job-title");
    }

    public static final String EMPTY_RESULTS_MESSAGE = "no-users-were-found";

    public UserSearch(PortletRequest portletRequest, PortletURL iteratorURL) {
        this(portletRequest, DEFAULT_CUR_PARAM, iteratorURL);
    }

    public UserSearch(
        PortletRequest portletRequest, String curParam,
        PortletURL iteratorURL) {

        super(
            portletRequest, new UserDisplayTerms(portletRequest),
            new UserSearchTerms(portletRequest), curParam, DEFAULT_DELTA,
            iteratorURL, headerNames, EMPTY_RESULTS_MESSAGE);

        PortletConfig portletConfig =
            (PortletConfig)portletRequest.getAttribute(
                JavaConstants.JAVAX_PORTLET_CONFIG);

        UserDisplayTerms displayTerms = (UserDisplayTerms)getDisplayTerms();
        UserSearchTerms searchTerms = (UserSearchTerms)getSearchTerms();

        String portletName = portletConfig.getPortletName();

        if (!portletName.equals(PortletKeys.USERS_ADMIN)) {
            displayTerms.setStatus(WorkflowConstants.STATUS_APPROVED);
            searchTerms.setStatus(WorkflowConstants.STATUS_APPROVED);
        }

        iteratorURL.setParameter(
            UserDisplayTerms.STATUS, String.valueOf(displayTerms.getStatus()));

        iteratorURL.setParameter(
            UserDisplayTerms.EMAIL_ADDRESS, displayTerms.getEmailAddress());
        iteratorURL.setParameter(
            UserDisplayTerms.FIRST_NAME, displayTerms.getFirstName());
        iteratorURL.setParameter(
            UserDisplayTerms.LAST_NAME, displayTerms.getLastName());
        iteratorURL.setParameter(
            UserDisplayTerms.MIDDLE_NAME, displayTerms.getMiddleName());
        iteratorURL.setParameter(
            UserDisplayTerms.ORGANIZATION_ID,
            String.valueOf(displayTerms.getOrganizationId()));
        iteratorURL.setParameter(
            UserDisplayTerms.ROLE_ID, String.valueOf(displayTerms.getRoleId()));
        iteratorURL.setParameter(
            UserDisplayTerms.SCREEN_NAME, displayTerms.getScreenName());
        iteratorURL.setParameter(
            UserDisplayTerms.USER_GROUP_ID,
            String.valueOf(displayTerms.getUserGroupId()));

        try {
            PortalPreferences preferences =
                PortletPreferencesFactoryUtil.getPortalPreferences(
                    portletRequest);

            String orderByCol = ParamUtil.getString(
                portletRequest, "orderByCol");
            String orderByType = ParamUtil.getString(
                portletRequest, "orderByType");

            if (Validator.isNotNull(orderByCol) &&
                Validator.isNotNull(orderByType)) {

                preferences.setValue(
                    PortletKeys.USERS_ADMIN, "users-order-by-col", orderByCol);
                preferences.setValue(
                    PortletKeys.USERS_ADMIN, "users-order-by-type",
                    orderByType);
            }
            else {
                orderByCol = preferences.getValue(
                    PortletKeys.USERS_ADMIN, "users-order-by-col", "last-name");
                orderByType = preferences.getValue(
                    PortletKeys.USERS_ADMIN, "users-order-by-type", "asc");
            }

            OrderByComparator orderByComparator =
                UsersAdminUtil.getUserOrderByComparator(
                    orderByCol, orderByType);

            setOrderableHeaders(orderableHeaders);
            setOrderByCol(orderByCol);
            setOrderByType(orderByType);
            setOrderByComparator(orderByComparator);
        }
        catch (Exception e) {
            _log.error(e);
        }
    }

    private static Log _log = LogFactoryUtil.getLog(UserSearch.class);

}

UserSearchTerms。java:

package kz.b2e.kudos.portal.searchuser.search;

import com.liferay.portal.kernel.dao.search.SearchContainer;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.util.JavaConstants;
import com.liferay.portal.kernel.util.OrderByComparator;
import com.liferay.portal.kernel.util.ParamUtil;
import com.liferay.portal.kernel.util.Validator;
import com.liferay.portal.kernel.workflow.WorkflowConstants;
import com.liferay.portal.model.User;
import com.liferay.portal.util.PortletKeys;
import com.liferay.portlet.PortalPreferences;
import com.liferay.portlet.PortletPreferencesFactoryUtil;
import com.liferay.portlet.usersadmin.util.UsersAdminUtil;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.portlet.PortletConfig;
import javax.portlet.PortletRequest;
import javax.portlet.PortletURL;


public class UserSearch extends SearchContainer<User> {

    static List<String> headerNames = new ArrayList<String>();
    static Map<String, String> orderableHeaders = new HashMap<String, String>();

    static {
        headerNames.add("first-name");
        headerNames.add("last-name");
        headerNames.add("screen-name");
        //headerNames.add("email-address");
        headerNames.add("job-title");
        headerNames.add("organizations");

        orderableHeaders.put("first-name", "first-name");
        orderableHeaders.put("last-name", "last-name");
        orderableHeaders.put("screen-name", "screen-name");
        //orderableHeaders.put("email-address", "email-address");
        orderableHeaders.put("job-title", "job-title");
    }

    public static final String EMPTY_RESULTS_MESSAGE = "no-users-were-found";

    public UserSearch(PortletRequest portletRequest, PortletURL iteratorURL) {
        this(portletRequest, DEFAULT_CUR_PARAM, iteratorURL);
    }

    public UserSearch(
        PortletRequest portletRequest, String curParam,
        PortletURL iteratorURL) {

        super(
            portletRequest, new UserDisplayTerms(portletRequest),
            new UserSearchTerms(portletRequest), curParam, DEFAULT_DELTA,
            iteratorURL, headerNames, EMPTY_RESULTS_MESSAGE);

        PortletConfig portletConfig =
            (PortletConfig)portletRequest.getAttribute(
                JavaConstants.JAVAX_PORTLET_CONFIG);

        UserDisplayTerms displayTerms = (UserDisplayTerms)getDisplayTerms();
        UserSearchTerms searchTerms = (UserSearchTerms)getSearchTerms();

        String portletName = portletConfig.getPortletName();

        if (!portletName.equals(PortletKeys.USERS_ADMIN)) {
            displayTerms.setStatus(WorkflowConstants.STATUS_APPROVED);
            searchTerms.setStatus(WorkflowConstants.STATUS_APPROVED);
        }

        iteratorURL.setParameter(
            UserDisplayTerms.STATUS, String.valueOf(displayTerms.getStatus()));

        iteratorURL.setParameter(
            UserDisplayTerms.EMAIL_ADDRESS, displayTerms.getEmailAddress());
        iteratorURL.setParameter(
            UserDisplayTerms.FIRST_NAME, displayTerms.getFirstName());
        iteratorURL.setParameter(
            UserDisplayTerms.LAST_NAME, displayTerms.getLastName());
        iteratorURL.setParameter(
            UserDisplayTerms.MIDDLE_NAME, displayTerms.getMiddleName());
        iteratorURL.setParameter(
            UserDisplayTerms.ORGANIZATION_ID,
            String.valueOf(displayTerms.getOrganizationId()));
        iteratorURL.setParameter(
            UserDisplayTerms.ROLE_ID, String.valueOf(displayTerms.getRoleId()));
        iteratorURL.setParameter(
            UserDisplayTerms.SCREEN_NAME, displayTerms.getScreenName());
        iteratorURL.setParameter(
            UserDisplayTerms.USER_GROUP_ID,
            String.valueOf(displayTerms.getUserGroupId()));

        try {
            PortalPreferences preferences =
                PortletPreferencesFactoryUtil.getPortalPreferences(
                    portletRequest);

            String orderByCol = ParamUtil.getString(
                portletRequest, "orderByCol");
            String orderByType = ParamUtil.getString(
                portletRequest, "orderByType");

            if (Validator.isNotNull(orderByCol) &&
                Validator.isNotNull(orderByType)) {

                preferences.setValue(
                    PortletKeys.USERS_ADMIN, "users-order-by-col", orderByCol);
                preferences.setValue(
                    PortletKeys.USERS_ADMIN, "users-order-by-type",
                    orderByType);
            }
            else {
                orderByCol = preferences.getValue(
                    PortletKeys.USERS_ADMIN, "users-order-by-col", "last-name");
                orderByType = preferences.getValue(
                    PortletKeys.USERS_ADMIN, "users-order-by-type", "asc");
            }

            OrderByComparator orderByComparator =
                UsersAdminUtil.getUserOrderByComparator(
                    orderByCol, orderByType);

            setOrderableHeaders(orderableHeaders);
            setOrderByCol(orderByCol);
            setOrderByType(orderByType);
            setOrderByComparator(orderByComparator);
        }
        catch (Exception e) {
            _log.error(e);
        }
    }

    private static Log _log = LogFactoryUtil.getLog(UserSearch.class);

}

UserDisplayTerms。JAVA

package kz.b2e.kudos.portal.searchuser.search;

import com.liferay.portal.kernel.dao.search.DisplayTerms;
import com.liferay.portal.kernel.util.GetterUtil;
import com.liferay.portal.kernel.util.ParamUtil;
import com.liferay.portal.kernel.util.Validator;
import com.liferay.portal.kernel.workflow.WorkflowConstants;

import javax.portlet.PortletRequest;


public class UserDisplayTerms extends DisplayTerms {

    public static final String EMAIL_ADDRESS = "emailAddress";

    public static final String FIRST_NAME = "firstName";

    public static final String LAST_NAME = "lastName";

    public static final String MIDDLE_NAME = "middleName";

    public static final String ORGANIZATION_ID = "organizationId";

    public static final String ROLE_ID = "roleId";

    public static final String SCREEN_NAME = "screenName";

    public static final String STATUS = "status";

    public static final String USER_GROUP_ID = "userGroupId";

    public UserDisplayTerms(PortletRequest portletRequest) {
        super(portletRequest);

        String statusString = ParamUtil.getString(portletRequest, STATUS);

        if (Validator.isNotNull(statusString)) {
            status = GetterUtil.getInteger(statusString);
        }

        emailAddress = ParamUtil.getString(portletRequest, EMAIL_ADDRESS);
        firstName = ParamUtil.getString(portletRequest, FIRST_NAME);
        lastName = ParamUtil.getString(portletRequest, LAST_NAME);
        middleName = ParamUtil.getString(portletRequest, MIDDLE_NAME);
        organizationId = ParamUtil.getLong(portletRequest, ORGANIZATION_ID);
        roleId = ParamUtil.getLong(portletRequest, ROLE_ID);
        screenName = ParamUtil.getString(portletRequest, SCREEN_NAME);
        userGroupId = ParamUtil.getLong(portletRequest, USER_GROUP_ID);
    }

    public String getEmailAddress() {
        return emailAddress;
    }

    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public String getMiddleName() {
        return middleName;
    }

    public long getOrganizationId() {
        return organizationId;
    }

    public long getRoleId() {
        return roleId;
    }

    public String getScreenName() {
        return screenName;
    }

    public int getStatus() {
        return status;
    }

    public long getUserGroupId() {
        return userGroupId;
    }

    public boolean isActive() {
        if (status == WorkflowConstants.STATUS_APPROVED) {
            return true;
        }
        else {
            return false;
        }
    }

    public void setStatus(int status) {
        this.status = status;
    }

    protected String emailAddress;
    protected String firstName;
    protected String lastName;
    protected String middleName;
    protected long organizationId;
    protected long roleId;
    protected String screenName;
    protected int status;
    protected long userGroupId;

}
 类似资料:
  • 我试图实现与linq文本搜索。我有一个用电子邮件数据填充的消息表。我想能够在消息体中搜索。然而,电子邮件正文很长,我想只显示搜索文本的一小部分,例如,如果我搜索: 奥特 在以下案文中: 知识产权是一种权利,是一种精英的权利,是劳动和财富的暂时性权利。但是,在最低限度上,我们需要一个实验室来进行日常工作。两人或两人在一个无教区的房间里互相指责。除偶尔因疏忽而死亡外,不得因疏忽而导致动物死亡。 结果应

  • 输入出发地和抵达地,可搜索前往目的地的路径。 轻触(选项)>[搜索路径],在出发地与抵达地的字段各自输入关键词并轻触[搜索]。地图会显示最短路径。 可从书签中选择出发地及抵达地。请轻触(书签),选择地点。 A ) (徒步)/(乘车) 可选择路径的移动方式。轻触即会以选择的移动方式搜索最短路径。 B ) 与目的地间的距离及所需时间 C ) (显示列表)/(隐藏列表) 轻触即可将搜索结果列表切换为显示

  • 想搜索地点时可输入相关的关键词或住址来搜索地点。 轻触(选项)>[搜索地点],在搜索栏输入关键词后轻触[搜索]。搜索结果会在地图上以(地点旗帜)显示。 查看搜索结果列表 显示地点旗帜时,可查看搜索结果列表。 1. 显示地图的状态下轻触屏幕。 2. 轻触(显示列表)。 画面会显示搜索结果列表。轻触想显示的地点即会显示地图。

  • 我想有开关情况循环我的九个菜单,在那里我可以在任何给定的一个和菜单跳转到下一个随机选择,现在它目前旋转的顺序,无论我在哪里点击。

  • 我有大量相同类型的实体,每个实体都有大量属性,并且我只有以下两种选择来存储它们: 将每个项存储在索引中并执行多索引搜索 将所有enties存储在单个索引中,并且只搜索1个索引。 一般而言,我想要一个时间复杂度之间的比较搜索“N”实体与“M”特征在上述每一种情况!

  • 我正在使用批量请求执行弹性搜索完整索引。我在索引过程中遇到了一个问题,结果是空的。由于我正在完整索引期间删除索引,因此如何处理这种情况。 我已经完成了以下步骤: 删除索引 创建索引 创建映射 批量请求 索引属性和映射: } 我有大约7.5万份文件。 谢谢,Sree。