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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

liferay实战

發布時間:2023/12/8 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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、在FreeMarker詳情模板中獲取值:

<#assign assetRenderer = curEntry.getAssetRenderer()> <#assign docXml = saxReaderUtil.read(assetRenderer.getArticle().getContent()) /> <#assign description = docXml.valueOf("//dynamic-element[@name='title']/dynamic-content/text()") />

3、在Velocity模板中獲取值:

#set($assetRenderer = $curEntry.getAssetRenderer())#set($docXml = $saxReaderUtil.read($assetRenderer.getArticle().getContent()))#set($description = $docXml.valueOf("//dynamic-element[@name='description']/dynamic-content/text()"))

4、獲取Liferay當前頁面的url:

PortalUtil.getCurrentURL(request);

5、中文亂碼:在當前工程的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"%>

6、liferay表
附件保存在以dlfile開頭的表里面
portlet自定義屬性保存在portletpreferences表里面
assetEntry里面可以查看有哪些屬性
web內容文章存儲在journalarticle里面
liferay模板都是存儲在ddmtemplate表里面
7、liferay模板變量
FreeMarkerTemplateContextHelper.java
8、自定義字段
設置值和讀取值
JournalArticle journalArticle = null;
journalArticle.getEcpandoBridge().setAttribute(“author”,”張三”);
journalArticle.getEcpandoBridge().getAttribute(“author”);
自定義字段在數據庫里面存儲的表:expandocolumn:欄目表、expandorow:行、expandotable:表、expandovalue:值
9、liferay中不需要的模板可以在控制面板->應用程序管理器中刪掉

比如商務版塊

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

10、數據庫里修改的在頁面上沒生效處理:
控制面板->服務器管理->清除數據庫緩存
11、控制面板->組件里面可關閉不需要的portlet


12、查看liferay模塊的版本

13、jsp的一些定制擴展
(1)、頁面上找找相應的class或id標簽的屬性

(2)在liferay源碼中搜索一下(idea的快捷鍵:crtil+shift+F)

(3)頁面上沒找到的話可以看看還有哪些js有引用

(4)如果這一塊不需要的話可以去掉,
14、覆蓋源碼中的jsp頁面
如點贊:
(1)新建一個mvc-portlet,可以刪除不需要的生成文件

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

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

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

(5)、測試一下

15、引入全局樣式
(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");} }

16、定時任務
在自己的某個插件中建立如下類

/*** 定時任務*/ @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;}


部署啟動后看效果

17、覆蓋全局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)部署后看效果,改成功了

18、覆蓋指定模塊語言包

Provide-Capability: \ liferay.resource.bundle;resource.bundle.base.name="content.Language",\ liferay.resource.bundle;resource.bundle.aggregate:String="(bundle.symbolic.name=com.huidian.zhanlve),(bundle.symbolic.name=com.liferay.portlet.configuration.css.web)";bundle.symbolic.name=com.liferay.portlet.configuration.css.web;resource.bundle.base.name="content.Language";service.ranking:Long="2";\ servlet.context.name=portlet-configuration-css-web解析一下: liferay.resource.bundle;resource.bundle.base.name="content.Language"聲明模塊的提供資源文件的內容content.Language liferay.resource.bundle;resource.bundle.aggregate:String=...要匯集的資源文件名和排名 "(bundle.symbolic.name=com.huidian.zhanlve),(bundle.symbolic.name=com.liferay.portlet.configuration.css.web)":該服務從這兩個包中匯集資源文件,前面的優先; bundle.symbolic.name=com.liferay.portlet.configuration.css.web;resource.bundle.base.name="content.Language":覆蓋com.liferay.portlet.configuration.css.web包的名為資源包content.Language service.ranking:Long="2":資源包的服務排名為2 servlet.context.name=portlet-configuration-css-web:目標資源位于servlet中的上下文portlet-configuration-css-web



修改成功

19、覆蓋源碼中的MVCAction
比如在web內容發布提交時處理,先在源碼中找到對應的action,可以用F12監聽一下請求的路徑對應的action



20、Hook事件-自定義變量
Portal.properties里面查看
application.shutdown.events:portal實例關閉
application.startup.events:Portal實例啟動或創建時
global.shutdown.events:portal的main servlet關閉
global.startup.events:main servlet啟動
layout.configuration.action.delete :頁面刪除
layout.configuration.action.update:頁面初始化,更新
login.events.post:登錄后事件.
login.events.pre:登錄前事件
logout.events.post:退出后
logout.events.pre :退出前
servlet.service.events.post:處理完一個請求后.
servlet.service.events.pre:處理請求前
servlet.session.create.events:session創建事件
servlet.session.destroy.events:session銷毀事件

@Component(immediate = true, property = {"key=login.events.post"},service = LifecycleAction.class ) public class LandingRedirectAction implements LifecycleAction {@Overridepublic void processLifecycleEvent(LifecycleEvent lifecycleEvent) throws ActionException {HttpSession session = lifecycleEvent.getRequest().getSession();session.setAttribute("LAST_PATH", new LastPath(StringPool.BLANK, "/group/zhanlve/index"));} } @Component(immediate = true, property = {"key=login.events.post"},service = LifecycleAction.class ) public class LandingRedirectAction implements LifecycleAction {@Overridepublic void processLifecycleEvent(LifecycleEvent lifecycleEvent) throws ActionException {HttpServletRequest request = lifecycleEvent.getRequest();HttpSession session = request.getSession();String useridStr = (String) session.getAttribute("j_username");String friendlyUrL = StringPool.BLANK;try {long userId = GetterUtil.getLong(useridStr);User user = UserLocalServiceUtil.getUser(userId);//獲取用戶有哪些站點List<Group> groups = user.getGroups();if (!groups.isEmpty()) {friendlyUrL = groups.get(0).getFriendlyURL();}else {//獲取用戶的組織機構List<Organization> organizations = user.getOrganizations();if (!organizations.isEmpty()) {//取組織機構站點Group group = organizations.get(0).getGroup();if (null!=group) {friendlyUrL = group.getFriendlyURL();}}}} catch (SystemException e) {e.printStackTrace();} catch (PortalException e) {e.printStackTrace();}String redirect = ParamUtil.getString(request, "redirect");if (Validator.isNotNull(redirect)) {redirect = PortalUtil.escapeRedirect(redirect);}if (Validator.isNotNull(friendlyUrL)) {redirect = "/group"+friendlyUrL;LastPath lastPath = new LastPath(StringPool.BLANK, redirect);session.setAttribute(WebKeys.LAST_PATH, lastPath);}} }

21、自定義過濾器

@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); }

22、自動登錄(驗證,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

中文不能識別


23、liferay在報錯或者找不到路徑時,全部跳轉到原有的error頁面
bundles/tomcat-8.0.32/webapps/ROOT/errors/code.jsp。項目中需要自定404頁面:首先,在bundles/tomcat-8.0.32/webapps/ROOT/errors/ 文件夾中創建自定義的404.jsp頁面(如果想在該頁面中顯示一些系統信息,可以參照code.jsp的寫法);然后在配置文件中配置該404頁面:
layout.show.http.status=true
layout.friendly.url.page.not.found=/errors/404.jsp

總結

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

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