• [Liferay]Portlet 规范中ResourceURL ,renderURL,actionURL介绍以及使用


    参考:

    https://blog.csdn.net/paranoid_android/article/details/20955735

    https://www.cnblogs.com/yaoniebingbing/p/3644861.html

    关于 resourceURL:

    Resource Serving Phase 是在 JSP-286 (Portlet 2.0) 规范中增加的 portlet 生命周期之一, 另一个 Event Phase。

    在一个 portlet 生命周期中, serveResource() 方法也就是 Resource Serving Phase 对应的方法, 在请求 ResourceURL 的状态下会被触发。

    关于 Resource Serving 生命周期的定义简单来说就是如下几点:

    • Resource Serving 生命周期允许 portlet 可以不用调用页面上所有 portlet 的 Render 生命周期而直接传回动态内容
    • 在 Portlet 1.0 规范中,portlet 的一个请求往往是返回一整个页面。
    • A Resource is requested via a ResourceURL. 得使用 ResourceURL 请求 Resource 生命周期。
    • Resource serving 非常适用于动态创建图像文件以及其他二进制资源;为AJAX请求返回 XML, JSON, HTML 片段,等等。
     
    在普通 portlet 开发过程中如果想使用 Resource Serving 生命周期代码如下:
     
    Jsp 代码: 

      <p><a href="" οnclick="loadXMLDoc('<portlet:resourceURL/>'); return false">

        点击调用 Resource Serving 生命周期
      </a></p>

    Java 代码, 在 继承自 GenericPortlet 的 portlet 实现类中添加:
     

      public void serveResource(ResourceRequest resourceRequest, ResourceResponse resourceResponse)

      throws PortletException, IOException{
        resourceResponse.setContentType("text/html");

        resourceResponse.getWriter().write("Resource served successfully!");

      }


    完成简单的两部,在页面点击按钮,就能成功调用 serverResource() 方法
     

    针对actionURL来说,主要为了和后台代码交互,即履行相对应的操纵,例如:删除操作,提交form表单等等。

    <portlet:actionURL name="Firstlevel" var="URL">
      <portlet:param name="firstlevelId"     value="<%= String.valueOf(firstlevelId) %>" />
      <portlet:param name="redirect"         value="<%= redirect %>"/>
     </portlet:actionURL>

    对应的后台代码是:

    复制代码
    public void Firstlevel(ActionRequest request, ActionResponse response)   throws Exception {   
    
      ThemeDisplay themeDisplay = (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY);
    
        long groupId = themeDisplay.getScopeGroupId();   
    
          long firstlevelId = ParamUtil.getLong(request, "firstlevelId");   
    
          ArrayList<String> errors = new ArrayList<String>();
    
           if (Validator.isNotNull(firstlevelId)) {    
    
                 FirstlevelLocalServiceUtil.Firstlevel(firstlevelId);    
    
                 SessionMessages.add(request, "firstlevel-d");    
    
                  sendRedirect(request, response);   
    
          }   else {         
    
                for (String error : errors) {
    
                       SessionErrors.add(request, error);         
    
        }   
    
      }  
    
    }
    复制代码

    在应用actionURL的时辰,为了和后台交互,必然要在<portlet:actionURL name="Firstlevel" var="URL">中的name名称和后台的办法名相对应,在此例子中,均为“Firstlevel”。

    针对renderURL来说,为了页面之间的跳转或者刷新,跟actionURL最大的差别在于,其不与后台进行交互,只是页面彼此之间的交互。

    <portlet:renderURL var="addChildlevelURL">
                   <portlet:param name="mvcPath" value="/html/config/edit_childlevel.jsp" />
                   <portlet:param name="redirect" value="<%= redirect %>" />
                   </portlet:renderURL>               
                   <aui:button value="Add Category" onClick="<%= addChildlevelURL.toString() %>"/>

    在上方的代码中,经由过程Add Category 按钮,当点击的时辰,页面会跳转到对应的增长(编辑)信息页面。

    在应用<portlet:***>的时辰,须要在前台代码中先声明<portlet:defineObjects/>。

  • 相关阅读:
    【leetcode】Spiral Matrix
    【leetcode】Permutations
    【leetcode】Search Insert Position
    【leetcode】Search for a Range
    文件名对目标文件夹可能过长
    协同过滤和简单SVD优化
    奇异值分解(SVD)和简单图像压缩
    PCA数据降维
    FP-growth高效频繁项集发现
    关联挖掘和Aprioir算法
  • 原文地址:https://www.cnblogs.com/show58/p/13809727.html
Copyright © 2020-2023  润新知