开发者训练营

长度 5 天
培训形式 私有培训
Liferay版本 7.1

更智能开发

知道何时使用自带的功能以及何时自定义现有功能,以便您可以快速实现业务需求。

利用Liferay的工具

从视图层到持久层,了解如何使用Liferay自定义平台的所有方面。

选择您的开发路径

了解OSGi中的模块化和开发如何使您受益以及如何使用WAR继续开发,以最大程度地减少业务影响。

您将学习到

  • Liferay和用户

    • 与Liferay DXP 一起工作

      • 为您的用户创建数字化体验
      • 获取详细信息:将您所学的知识应用到真实用例中
    • 引入现有用户

      • 把您的用户导入Liferay
      • 从LDAP的引入用户
    • 用户管理

      • 在Liferay中创建组织架构
      • 动态映射LDAP群组到Liferay
      • 用户组织的不同点之处和策略
    • 控制用户访问

      • 为单一资源定义精细权限
      • 使用角色映射到真实生活的工作责任
  • 通过站点管理内容

    • 通过站点联系用户

      • 创建网站吸引您的用户
      • 创建内网增强您的部门和团队的能力
      • 管理站点成员
    • 发布和工作流

      • 在发布之前,了解如何使用工作流和待发布对内容进行检查
    • 数字化内容

      • 在通用框架中创建、分享和连接内容
      • 使用强大的工具构建和管理内容
      • 功能概览:
        构建现代化站点(新!)
        资产管理
        使用元数据进行组织
    • 完整的数字化体验

      • 功能概览:
        Analytics Cloud
        Commerce
        移动端
  • 开发应用程序

    • 设置开发环境

      • 准备好您的开发环境
    • OSGi基本原理

      • OSGi简介
      • 基本OSGi概念
      • 什么是Bundles?
      • 组件和服务
      • 分享功能
      • 框架架构
      • 使用OSGi的优势
    • Liferay的OSGi容器

      • 什么是OSGi容器?
      • 使用Liferay Workspace
      • 介绍Liferay模块
      • 管理模块化依赖条件
    • 管理OSGi Bundle

      • 通过Gogo Shell管理 OSGi Bundle
      • 使用Felix Web Console
    • 使用Portlet模块化

      • Java 标准Portlet
    • 开发真实应用程序

      • 创建服务层
      • 创建显示层
      • 使用Liferay 配置框架
      • 实现权限检查
      • 资产框架
      • 搜索框架
      • 工作流
      • 使用Web Services
      • 集成和功能性测试
      • 调试和管理部署问题
  • 自定义您的平台

    • Liferay 平台架构概览

      • 查看Liferay 平台架构
    • 自定义用户界面

      • Liferay UI技术概览
      • 使用应用程序显示模板更改默认UI
      • 自定义应用程序JSP
    • 扩展Liferay Schema

      • 通过Expando API动态添加自定义字段
    • 自定义服务层

      • 使用Service Wrapper重写和扩展Liferay服务
      • 重写OSGi服务引用
    • 重写控制器操作

      • 重写Struts 操作
      • 重写门户 MVC命令
    • 获取门户事件

      • 获取门户生命周期事件
      • 使用Model Linsener拦截事件
    • 利用Liferay消息总线

      • 自定义Portal 审计
    • 自定义平台搜索

      • 使用处理器自定义索引和搜索的结果
处理模板时发生错误。
Java method "com.sun.proxy.$Proxy622.getArticle(long, String)" threw an exception when invoked on com.sun.proxy.$Proxy622 object "[email protected]543b4c4a"; see cause exception in the Java stack trace.

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign article = journal_article_loc...  [in template "ARTICLE_UTILITIES" in macro "runtime_embed_journal_article_by_article_id" at line 117, column 9]
	- Reached through: @article_utilities.runtime_embed_jour...  [in template "10155#10195#LEGO" at line 39, column 96]
----
1<#import "${templatesPath}/article_utilities" as article_utilities> 
2 
3<div class="lego-article ${article_class.getData()}" id="article-${.vars['reserved-article-id'].getData()}"> 
4	<#list section.siblings as cur_section> 
5		<section class="block-container lego-section section-${cur_section_index + 1} ${cur_section.section_class.getData()}" ${cur_section.getData()}> 
6			<#list cur_section.block.siblings as cur_block> 
7				<div class="block block-${cur_block_index + 1} content-column lego-block w${cur_block.width.getData()} ${cur_block.block_class.getData()}" ${cur_block.getData()}> 
8					<#list cur_block.element.siblings as cur_element> 
9						<#assign cur_element_tag = cur_element.tag.getData()> 
10 
11						<#if !cur_element_tag?has_content> 
12							<#assign cur_element_tag = "div"> 
13						</#if> 
14 
15						<#assign cur_element_css_class = "lego-element " + cur_element.element_class.getData() /> 
16						<#assign button_attrs = cur_element.getData() /> 
17 
18						<#if article_utilities.has_update_permissions()> 
19							<#assign cur_element_css_class = cur_element_css_class + " live-edit" /> 
20							<#assign button_attrs = button_attrs + " 
21								data-article-id='${.vars[\"reserved-article-id\"].getData()}' 
22								data-level-path='${cur_section.name}::${cur_section_index},${cur_block.name}::${cur_block_index},${cur_element.name}::${cur_element_index},${cur_element.content.name}::0' 
23							" /> 
24						</#if> 
25 
26						<${cur_element_tag} class="${cur_element_css_class}" ${button_attrs}> 
27							${cur_element.content.getData()} 
28						</${cur_element_tag}> 
29					</#list> 
30 
31					<#if cur_block.article_url_title?has_content> 
32						<#list cur_block.article_url_title.siblings as article_url_title> 
33							<#if article_url_title.getData()?has_content> <@article_utilities.runtime_embed_journal_article_by_url_title article_url_title.getData() /> </#if> 
34						</#list> 
35					</#if> 
36 
37					<#if cur_block.article_id?has_content> 
38						<#list cur_block.article_id.siblings as article_id> 
39							<#if article_id.getData()?has_content> <@article_utilities.runtime_embed_journal_article_by_article_id article_id.getData() /> </#if> 
40						</#list> 
41					</#if> 
42				</div> 
43			</#list> 
44		</section> 
45	</#list> 
46</div> 
47 
48<#if css.getData()?has_content> 
49	<style type="text/css"> 
50		${css.getData()} 
51	</style> 
52</#if> 
53 
54<#if javascript?? && javascript.getData()?has_content> 
55	<script> 
56		${javascript.getData()} 
57	</script> 
58</#if> 

Didn’t find what you were looking for?

Contact us, and we'll work to find a training that meets your needs.