Можно ли сделать строки liferay-ui:search-Container недоступными для редактирования в Life ray?

У меня есть страница, на которой мне нужно назначить роли сайта для пользователя в моем пользовательском портлете. Таким образом, я могу получить «Существующие роли пользователя» в одном списке и все «Доступные роли сайта» в другом списке. Итак, как я могу выполнить кондиционирование или любую проверку, которую мне нужно сделать нередактируемой для строк, которые были назначены пользователем. Допустим, у нас есть четыре роли типа сайта, т. е. администратор сайта, владелец сайта, участник сайта и рецензент контента сайта. Теперь соответствующему пользователю уже назначена роль администратора сайта. Итак, теперь в строках контейнера поиска мне нужно сделать строку администратора сайта. как нередактируемый, потому что у пользователя уже есть эта роль). Мой код выглядит следующим образом:

 <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
    <%@include file="/html/users/init.jsp"%>

    <portletefineObjects />
             <%
List<Role> siteRoleList = (List) request.getAttribute("allsiteRolesList");   
List<Role> existingRoles = (List) request.getAttribute("existingRoles");     
String sel_userID = renderRequest.getParameter("sel_userID");
String backURL = ParamUtil.getString(request, "backURL");
            %>
            <%! 
                    List<Role> roles = null;
                    int totalNoOfroles=0;
                    String value = null;
            %>
            <%
            totalNoOfroles = siteRoleList.size();        
            roles = siteRoleList;
            %> 

    <liferay-ui:header backURL="<%= backURL %>" title="Available Site Roles" />

            <liferay-ui:search-container delta="5" emptyResultsMessage="no-site-roles-were-found" rowChecker="<%= new RowChecker(renderResponse) %>" >
            <liferay-ui:search-container-results
                    results="<%= ListUtil.subList(roles,searchContainer.getStart(),searchContainer.getEnd()) %>"
            total="<%= totalNoOfroles %>">    
        </liferay-ui:search-container-results>
            <liferay-ui:search-container-row className="com.liferay.portal.model.Role" keyProperty="roleId"        modelVar="role">

                    <liferay-ui:search-container-row-parameter name="roleIds" value="<%= role.getRoleId() %>"></liferay-ui:search-container-row-parameter>
                    <liferay-ui:search-container-row-parameter name="userIds" value="<%= sel_userID %>"></liferay-ui:search-container-row-parameter>
                    <liferay-ui:search-container-column-text name="title" value="<%= role.getName()%>" />
            <liferay-ui:search-container-column-text name="type" value="<%= role.getTypeLabel() %>">
            </liferay-ui:search-container-column-text>

            <liferay-ui:search-container-column-text name="description" value="<%= role.getDescription() %>">
            </liferay-ui:search-container-column-text>

                    <liferay-ui:search-container-column-jsp align="right" path="/html/users/user_assign_site_role_actions.jsp" />

            </liferay-ui:search-container-row>
            <liferay-ui:search-iterator />
    </liferay-ui:search-container>
    <liferay-ui:search-container delta="5" emptyResultsMessage="no-users-were-found" />

Класс действия:

 public void assignUserSiteRoles(ActionRequest request, ActionResponse response) throws com.liferay.portal.kernel.exception.PortalException, com.liferay.portal.kernel.exception.SystemException{
                    String sel_userID = ParamUtil.getString(request, "selectedId");
                    long userid = Long.valueOf(sel_userID);
                    String backURL = ParamUtil.getString(request, "backURL");
                    ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(WebKeys.THEME_DISPLAY);
                    long companyId = themeDisplay.getCompanyId();
                    long mySite =  themeDisplay.getSiteGroupId();
                    List<Role> allsiteRolesList = new ArrayList<Role>();
List<Role> existing roles = new ArrayList<Role>(); 


                    List<UserGroupRole> userGroupRoleList = UserGroupRoleLocalServiceUtil.getUserGroupRoles(userid, mySite);
                                if (userGroupRoleList != null) {
                                for (UserGroupRole userGroupRole : userGroupRoleList) {
                                    /* Get Role object based on userGroupRole.getRoleId() */
                                    Role role = RoleLocalServiceUtil.getRole(userGroupRole.getRoleId());
                                    if(role.getTypeLabel().equalsIgnoreCase("Site"))
                                {
                                 existingroles.add(role);             
                                }

                                }
                            }

                    List<Role> rolesList = RoleLocalServiceUtil.getRoles(companyId);
                    if (rolesList != null) {
                for (Role role : rolesList) {  
                                if(role.getTypeLabel().equalsIgnoreCase("Site"))
                                {
                                        allsiteRolesList.add(role);
                                }
                    }
                }


                    request.setAttribute("allsiteRolesList", allsiteRolesList);
                    response.setRenderParameter("sel_userID", sel_userID);
                    response.setRenderParameter("backURL", backURL);
                    response.setRenderParameter("mvcPath","/html/users/assign_user_site_roles.jsp");
              }

В моем коде siteRoleList есть список всех доступных ролей, а existingRoles список имеет роли, которые уже назначены для этого соответствующего пользователя. Итак, как сделать редактируемыми только те строки, у которых есть эти роли.

actionJSP

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

<%
ResultRow resultRow = (ResultRow)request.getAttribute(WebKeys.SEARCH_CONTAINER_RESULT_ROW);
Role role = (Role)resultRow.getObject();
String rowUserId = (String)resultRow.getParameter("userIds");
%>

<liferay-ui:icon-menu>  

  <portlet:actionURL name="UserSiteRoleAssign" var="UserSiteRoleAssign">
          <portlet:param name="selectedId" value="<%=String.valueOf(role.getRoleId()) %>" />
          <portle:pgaram name="rowUserId" value="<%= rowUserId %>" />
  </portlet:actionURL>
  <liferay-ui:icon iconCssClass="icon-signin" message="Assign Role" url="<%= UserSiteRoleAssign.toString() %>" />
</liferay-ui:icon-menu>

Любые предложения, пожалуйста..


person Prasad    schedule 16.04.2015    source источник
comment
В этом случае не визуализируйте действия JSP.   -  person Parkash Kumar    schedule 16.04.2015
comment
Ваше действие доступно через user_assign_site_role_actions.jsp Если вы можете сделать его условным, скрыв уже назначенные роли, то это может быть полезно.   -  person Parkash Kumar    schedule 17.04.2015
comment
Как вы определяете, что определенной строке была назначена роль?   -  person Parkash Kumar    schedule 17.04.2015
comment
Сценарий назначает роль сайта для пользователя. Я выберу соответствующую строку пользователя, и на основе этого идентификатора пользователя в моем классе действий я получаю список назначенных ролей сайта и сохраняю его в одном списке, и тем же методом я получаю список всех ролей сайта и сохраняю их в другом список. И, наконец, я отправляю оба списка на эту страницу JSP   -  person Prasad    schedule 17.04.2015
comment
обновил мой вопрос с полным кодом   -  person Prasad    schedule 17.04.2015


Ответы (1)


Я не уверен, как вы оцениваете условие, чтобы проверить, что определенный пользователь имеет эту конкретную роль.

В любом случае, в вас actionJSP, если вам удастся определить, что выбранный пользователь имеет эту конкретную роль, проверив список существующих ролей следующим образом, это должно помочь вам:

<%
ResultRow resultRow = (ResultRow)request.getAttribute(WebKeys.SEARCH_CONTAINER_RESULT_ROW);
Role role = (Role)resultRow.getObject();
String rowUserId = (String)resultRow.getParameter("userIds");

/* Get user existingRoles list here. */
boolean hasSiteRole = false;

for(Role userRole : existingRoles){
    if(userRole.getRoleId() == role.getRoleId())
        hasSiteRole = true;
}


%>

<liferay-ui:icon-menu>
    <portlet:actionURL name="UserSiteRoleAssign" var="UserSiteRoleAssign">
        <portlet:param name="selectedId" value="<%=String.valueOf(role.getRoleId()) %>" />
        <portle:pgaram name="rowUserId" value="<%= rowUserId %>" />
    </portlet:actionURL>

    <%
        String url = !hasSiteRole ? UserSiteRoleAssign.toString() : "javascript: void();";
        String styleClass = !hasSiteRole ? "icon-signin" : "icon-signin-diabled";
    %>

    <liferay-ui:icon iconCssClass="<%=styleClass %>" message="Assign Role" url="<%=url %>" />
</liferay-ui:icon-menu>

На основе свойства hasSiteRole вы можете управлять href, class или rendering для значка. Вы также можете проверить это на главном экране. Скрыть значок и класс стиля как отключенные в случае, если определенная роль уже существует для пользователя в списке существующих ролей.

Примечание. Это всего лишь идея, вы должны воплотить ее в жизнь.

person Parkash Kumar    schedule 17.04.2015