日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

liferay 7.0开发到部署

發布時間:2023/12/8 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 liferay 7.0开发到部署 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一、開發環境搭建
    • 1、下載插件
    • 2、創建Liferay Project
    • 3、創建之后的項目列表
  • 二、初始化liferay服務
  • 三、配置Liferay服務
  • 四、創建portlet
    • 1、創建module
    • 2、自定義module
    • 3、部署module
    • 4、啟動服務測試
  • 五、創建theme
    • 1、新建module
    • 2、創建主題
    • 3、deploy
  • 六、liferay進階
    • 1、portal.properties的配置
    • 2、中文亂碼
    • 3、liferay表
    • 4、自定義字段
    • 5、liferay中不需要的模板可以在控制面板->應用程序管理器中刪掉
    • 6、數據庫里修改的在頁面上沒生效處理
    • 7、控制面板->組件里面可關閉不需要的portlet
    • 8、查看liferay模塊的版本
    • 9、覆蓋源碼中的jsp頁面
    • 10、引入全局樣式
    • 11、定時任務
    • 12、覆蓋全局Liferay語言包
    • 13、自定義過濾器
    • 14、自動登錄(驗證,url上面帶了userId就可以自動登錄)

一、開發環境搭建

軟件環境:
必須:

liferay-ce-portal-tomcat-7.0-ga5-20171018150113838.zip
說明:Liferay的運行環境。

liferay-ide-eclipse-windows-x64-3.1.2-ga3-201709011126.zip
說明:開發所使用的IDE,其實就是一個基于Eclipse上運行的插件,當然也可以選擇使用IDEA進行開發

所需要的軟件都可以在這里找到:liferay官方

網上有太多傳統的搭建方式,我們這里主要介紹官方最為推崇的OSGI模塊模式。
網上幾乎所有的介紹都是基于eclipse,我們這里介紹的是目前比較主流的ide工具:IDEA

1、下載插件

在idea plugin中下載Liferay相關插件

2、創建Liferay Project

3、創建之后的項目列表


如果創建完之后,不是這個目錄結構,那應該是環境搭建失敗了,需要重新加載項目結構。

二、初始化liferay服務

  • 下載完畢 liferay-ce-portal-tomcat-7.0-ga5-20171018150113838.zip之后,需要先行解壓
  • 解壓完畢之后,在其目錄下的tomcat目錄下的bin文件夾下啟動tomcat
  • 注意,這里的tomcat其實和普通的tomcat并沒有太大的區別,只是多了一些liferay的jar包
  • 啟動好liferay服務之后
  • 在瀏覽器輸入localhost:8080
  • 就會看到如下的頁面
  • 我們先將默認語言改為中文
  • 這里默認的數據庫有些時候并不能完成我們的日常業務需求
  • 所以我們選擇自定義數據庫
  • 這里我們就完成了數據庫的配置
  • 此時我們還要注意數據庫要有一個對應的空的數據庫
  • 在你點擊完成配置的時候,會有32個數據庫初始化在你的這個數據庫中
  • 這時會讓你同意條款
  • 一直下滑,直至看到同意選項,點擊同意即可完成
  • 同意之后,會有讓你設置密碼
  • 這里注意,如果你自定義了自己的數據庫,那么就不會有這個設置密碼環節
  • 這里會有默認的賬號和密碼
  • 賬號:test@liferay.com
  • 密碼:test
  • 設置新密碼之后,會有一個密保環節
  • 設置完密保之后,就完成了初始化的事情
  • 之后,你就會進入liferay的主頁。
  • 恭喜你,liferay的世界你要打開大門了。

三、配置Liferay服務

首先在官網下載liferay服務:https://www.liferay.com/zh/downloads-community


后面一路OK就行

四、創建portlet

1、創建module

右鍵項目名選擇new module,或者右鍵modules選擇new module

2、自定義module

3、部署module

將生成的jar包放到Liferay服務器下的deploy目錄中

4、啟動服務測試

五、創建theme

1、新建module

2、創建主題

3、deploy

六、liferay進階

1、portal.properties的配置

路徑:/portal-master/portal-impl/src/portal.properties

后臺打印sql的配置:Hibernate.show_sql=true

頁面session超時時間設置:session.timeout=300

只有powerUser用戶才會自動創建 用戶私有頁:

layout.user.private.layouts.power.user.required=true

只有powerUser用戶才會自動創建 用戶公開頁:

layout.user.public.layouts.power.user.required=true

用戶第一次登錄時的相關配置:

  • 關閉使用條款:terms.of.use.required=true
  • 關閉密碼提醒功能:users.reminder.queries.enabled=false
  • 關閉首次登錄強制修改密碼功能:passwords.default.policy.change.required=false

2、中文亂碼

在當前工程的build.gradle文件中添加如下信息:

tasks.withType(JavaCompile) {options.encoding = 'UTF-8' }

然后重新執行deploy
頁面亂碼:在頁面增加如下代碼:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ page contentType="text/html;charset=utf-8"%>

3、liferay表

附件保存在以dlfile開頭的表里面

portlet自定義屬性保存在portletpreferences表里面

assetEntry里面可以查看有哪些屬性

web內容文章存儲在journalarticle里面

liferay模板都是存儲在ddmtemplate表里面

4、自定義字段

設置值和讀取值

JournalArticle journalArticle = null; journalArticle.getEcpandoBridge().setAttribute(“author”,”張三”); journalArticle.getEcpandoBridge().getAttribute(“author”);

自定義字段在數據庫里面存儲的表:

  • expandocolumn:欄目表
  • expandorow:行
  • expandotable:表
  • expandovalue:值

5、liferay中不需要的模板可以在控制面板->應用程序管理器中刪掉


比如商務版塊

卸載完后的效果:商務那一塊就沒有了

6、數據庫里修改的在頁面上沒生效處理

控制面板->服務器管理->清除數據庫緩存

7、控制面板->組件里面可關閉不需要的portlet


8、查看liferay模塊的版本

9、覆蓋源碼中的jsp頁面

(1)新建一個mvc-portlet,可以刪除不需要的生成文件

(2)在源碼中找到對應的bnd文件

(3)修改新建的mvc-portlet中的bnd文件,也就是需要覆蓋的源碼是哪一個

(4)、把要覆蓋的jsp復制出來放到對應的目錄下面

(5)、測試一下

10、引入全局樣式

(1)查找到源碼中的擴展點

(2)引入全局css

String content = "<like href=\"/o/xxx/css/custom.css\" rel=\"stylesheet\" type=\"text/css\" />";

@Component(immediate = true,service = DynamicInclude.class) public class CssTopHeadDynamicInclude extends BaseDynamicInclude {@Overridepublic void include(HttpServletRequest request, HttpServletResponse response, String key) throws IOException {PrintWriter printWriter = response.getWriter();String content = "<like href=\"/o/xxx/css/custom.css\" rel=\"stylesheet\" type=\"text/css\" />";printWriter.println(content);}@Overridepublic void register(DynamicIncludeRegistry dynamicIncludeRegistry) { dynamicIncludeRegistry.register("/html/common/themes/top_head.jsp#pre");} }

11、定時任務

在自己的某個插件中建立如下類

/*** 定時任務*/ @Component(immediate = true, service = DdTestMessageListener.class) public class DdTestMessageListener extends BaseMessageListener {@Activateprotected void activate() {Class<?> clazz = getClass();String className = clazz.getName();/** 每隔15秒鐘執行一次 */Trigger trigger = _triggerFactory.createTrigger(className, className, null, null,15, TimeUnit.SECOND);SchedulerEntry schedulerEntry = new SchedulerEntryImpl(className, trigger);_schedulerEngineHelper.register(this, schedulerEntry, DestinationNames.SCHEDULER_DISPATCH);}@Deactivateprotected void deactivate() {_schedulerEngineHelper.unregister(this);}/*** 定時任務執行的方法體* @param message* @throws Exception*/@Overrideprotected void doReceive(Message message) throws Exception {System.out.println(new Date());}@Reference(target = ModuleServiceLifecycle.PORTAL_INITIALIZED, unbind = "-")protected void setModuleServiceLifecycle(ModuleServiceLifecycle moduleServiceLifecycle) {}@Reference(unbind = "-")protected void setSchedulerEngineHelper(SchedulerEngineHelper schedulerEngineHelper) {_schedulerEngineHelper = schedulerEngineHelper;}private SchedulerEngineHelper _schedulerEngineHelper;@Referenceprivate TriggerFactory _triggerFactory;}


部署啟動后看效果

12、覆蓋全局Liferay語言包

(1)、找到源碼中想要覆蓋的語言配置
liferay-ce-portal-src-7.3.5-ga6\portal-impl\classes\content\Language_zh_CN.properties
(2)在自己的某個插件中建立如下類,在項目的language里面寫對應的值

@Component(property = { "language.id=zh_CN" },service = ResourceBundle.class ) public class MyCNResourceBundle extends ResourceBundle {@Overrideprotected Object handleGetObject(String key) {return _resourceBundle.getObject(key);}@Overridepublic Enumeration<String> getKeys() {return _resourceBundle.getKeys();}private final ResourceBundle _resourceBundle = ResourceBundle.getBundle("content.Language_zh_CN", UTF8Control.INSTANCE);}


(3)把需要覆蓋的配置放在對應的文件中,如想把微件頁改為portlet頁


(4)部署后看效果,改成功了

13、自定義過濾器

@Component(immediate = true,property = {//"before-filter=Auto Login Filter",//"after-filter=SSO CAS Filter","dispatcher=FORWARD","dispatcher=REQUEST","servlet-context-name=","servlet-filter-name= Custom CAS LDAP Import Filter","url-pattern=/c/portal/login"},service = Filter.class) public class CustomCASFilter extends BaseFilter {@Overridepublic boolean isFilterEnabled(HttpServletRequest request, HttpServletResponse response){//通過配置文件獲取//boolean enabled = GetterUtil.getBoolean(PropsUtil.get("custom.cas.ldap.import.enabled"));return true;}@Overrideprotected void processFilter(HttpServletRequest request,HttpServletResponse response, FilterChain filterChain) throws Exception{HttpSession session = request.getSession();System.out.println("進入CustomCASFilter");processFilter(CustomCASFilter.class.getName(), request, response, filterChain);}@Overrideprotected Log getLog() {return _log;}private static final Log _log = LogFactoryUtil.getLog(CustomCASFilter.class); }

14、自動登錄(驗證,url上面帶了userId就可以自動登錄)

可以跟過濾器結合使用,過濾器過濾到對應請求地址,把信息寫到session中,這里就可以從session中獲取值了

@Component(immediate = true,service = AutoLogin.class ) public class CustomLogin extends BaseAutoLogin {@Overrideprotected String[] doLogin(HttpServletRequest request, HttpServletResponse response) throws Exception {Long userId = ParamUtil.getLong(request,"userId");if(Validator.isNotNull(userId)){User user = UserLocalServiceUtil.fetchUser(userId);return new String[]{ userId.toString(),user.getPassword(),String.valueOf(user.isPasswordEncrypted())};}return null;} }

提供回調地址

@Component(immediate = true,property = "path=/portal/sso/login",service = StrutsAction.class ) public class LoginAction implements StrutsAction{@Overridepublic String execute(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {String token = ParamUtil.getString(httpServletRequest,"token");System.out.println("token:"+token);if(Validator.isNotNull(token)){//在這里調用方法,處理用戶信息,比如自動創建或調用用戶信息等Long userId = GetterUtil.getLong(token);HttpSession session = httpServletRequest.getSession();session.setAttribute("CUSTOM_LOGIN_USER_ERROR","test error");session.setAttribute("CUSTOM_LOGIN_USER_ID",userId);}httpServletResponse.sendRedirect("/web/guest");return null;} }


實際訪問時前面要加一個c

中文不能識別

總結

以上是生活随笔為你收集整理的liferay 7.0开发到部署的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。