У меня есть страница, на которой мне нужно назначить роли сайта для пользователя в моем пользовательском портлете. Таким образом, я могу получить «Существующие роли пользователя» в одном списке и все «Доступные роли сайта» в другом списке. Итак, как я могу выполнить кондиционирование или любую проверку, которую мне нужно сделать нередактируемой для строк, которые были назначены пользователем. Допустим, у нас есть четыре роли типа сайта, т. е. администратор сайта, владелец сайта, участник сайта и рецензент контента сайта. Теперь соответствующему пользователю уже назначена роль администратора сайта. Итак, теперь в строках контейнера поиска мне нужно сделать строку администратора сайта. как нередактируемый, потому что у пользователя уже есть эта роль). Мой код выглядит следующим образом:
<%@ 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>
Любые предложения, пожалуйста..