3

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

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

在 view.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");

ABContactDisplayTerm.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 上放置一些调试消息,但它们都没有打印到控制台中。taglib 似乎没有找到或处理该文件。

任何帮助,将不胜感激!

4

2 回答 2

5

我的 100% 工作示例,其中使用 liferay-ui: search-container、liferay-ui: search-form 和 liferay-ui: search-toggle:

我的 100% 工作示例,其中使用 liferay-ui: search-container, liferay-ui: search-form 和 liferay-ui: search-toggle: view.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>

用户搜索.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_search_results_index.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_columns.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;

}
于 2013-08-27T06:18:01.183 回答
0

把你的代码放进去

<aui:form action="<%= portletURL.toString() %>" method="post" name="yourForm">
</aui:form>
于 2013-06-13T23:34:25.843 回答