【发布时间】:2015-06-23 03:26:51
【问题描述】:
我有一个页面,我需要在我的自定义 portlet 中设置为用户分配站点角色。因此,我能够在一个列表中获取“用户现有角色”,在另一个列表中获取所有“可用站点角色”。那么我该如何进行调节或任何我需要对已分配用户的行进行不可编辑的验证。假设(我们有四个站点类型角色,即站点管理员、站点所有者、站点成员和站点内容审阅者现在各个用户已经分配了站点管理员角色。所以现在在搜索容器行中,我需要创建站点管理员行不可编辑,因为用户已经拥有此角色)。我的代码如下,
<%@ 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>
请有任何建议..
【问题讨论】:
-
在这种情况下不要渲染动作 jsp。
-
您的操作可通过 user_assign_site_role_actions.jsp 获得
-
您如何确定某行已被分配角色?
-
场景是为用户分配站点角色。我将选择相应的用户行,并根据我的操作类中的用户 ID,我将获取分配的站点角色列表并将其保存在一个列表中,并且以相同的方法,我将获取所有站点角色的列表并将它们保存在另一个列表中列表。最后我将两个列表都发送到这个 jsp 页面
-
用完整代码更新了我的问题
标签: liferay hook liferay-6 liferay-theme liferay-aui