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

是否可以在Life ray中将liferay ui:搜索容器行设置为不可编辑?

慕乐语
2023-03-14

我有一个页面,需要在自定义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>

有什么建议吗。。

共有1个答案

蒋典
2023-03-14

我不确定你如何评估条件来检查某些用户是否具有特定的角色。

无论如何,在你的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呈现。你也可以在主视图上查看。如果用户在existingRoles列表中已经存在某个角色,则将图标和样式类隐藏为禁用状态。

注意:这只是一个想法,你要给它具体的实施。

 类似资料:
  • 我已经使用Liferay搜索容器来显示自定义实体的数据,它正在工作。我有另一个portlet,其中数据来自RESTAPI,所以有没有任何方法可以使用搜索容器?或者我需要使用datatable。我的REST API有分页和无分页。

  • 问题内容: 我知道可以偏斜,但我看不到以特定角度偏斜每个角的方法。 这是我正在从事的项目: 专门查看菜单中的标签。现在,我正在使用图像,我想针对功能强大的浏览器进行更改。 我知道可以创建CSS trapazoid,但是使用没有内容的边框。最终结果还需要一些圆角。 问题答案: 这可能是一个大概的想法:

  • 我想自定义android studio编辑器背景,所以我想把图像设置为编辑器,有没有可能,有没有什么选项可以执行?

  • 我在我的代码中使用了riveray-ui:搜索容器。 搜索结果正在正确显示,直到我单击下一步。portlet正在重新加载,这将把我带到portlet的第一页,丢弃呈现的搜索结果。 即使在重新加载portlet之后,我如何保留搜索结果?

  • 需要一个解决方案来转换PDF文件,其中每个页面都是图像,页面可以包含文本,表格或两者的组合到可搜索的pdf。 我使用了ABBY FineReader Online,这项工作做得非常好,但我正在寻找一个可以通过Windows Python实现的解决方案 我已经做了详细的分析,下面的链接接近我想要的,但并不准确: 扫描图像/PDF到可搜索图像/PDF 它告诉我们首先要使用Ghost脚本将其转换为图像,

  • 问题内容: 如果我想将cq5组件设置为在A页中可编辑但在B页中不可编辑,是否可以。 例如:在A页上,我有C组件,我们允许作者打开对话框并编辑该组件。但是我们不允许作者打开对话框来编辑页面B上的组件C。我尝试研究cq:EditConfig 链接,但这还不足以解决我的问题。 问题答案: 您可以在包含之前设置ComponentContext.BYPASS_COMPONENT_HANDLING_ON_IN