JSP Hook

JSP 鉤子是一個特殊的 liferay 外掛,允許修改核心 portlet jsp-s,假設你想修改登入 portlet 來顯示 Welcome in my custom login!

Hook 外掛的最小結構如下:

[project-name]-hook/
 └── docroot/
     ├── WEB-INF/
     │   ├── src/
     │   ├── lib/
     │   ├── liferay-hook.xml
     │   ├── liferay-plugin-package.properties
     │   └── web.xml
     └── META-INF/
         ├── custom_jsps/
         └── MANIFEST.MF

liferay-hook.xml 是解析你正在使用的鉤子型別的檔案,這裡你在鉤子標籤裡面定義鉤子的正確引數,對於 JSP 鉤子:

<?xml version="1.0"?>
<!DOCTYPE hook PUBLIC "-//Liferay//DTD Hook 6.2.0//EN" "http://www.liferay.com/dtd/liferay-hook_6_2_0.dtd">

<hook>
    <custom-jsp-dir>/custom_jsps</custom-jsp-dir>
</hook>

login.jsp/docroot/html/portlet/login/login.jsp 的 Liferay 中找到,為了製作它的鉤子,我們需要在 custom_jsps 資料夾中新增一個名稱和路徑相同的 jsp。

當部署鉤子時,Liferay 將在 liferay-hook.xml 中查詢 custom-jsp-dir 值,並將所有門戶 JSP 替換為此目錄中的 JSP。原始的 jsp 以名稱 <orginal name>.portal.jsp 儲存,以便在鉤子取消部署時恢復。

如果我們想讓程式碼保持適應基礎 Liferay 平臺版本的更新或升級,我們甚至可以在新修改的 JSP 中呼叫原始 JSP。為此,在自定義 JSP 中使用以下模式:

<liferay-util:buffer var="contentHtml">
    <liferay-util:include page="/html/{ JSP file’s path }" />
</liferay-util:buffer>

在這種情況下 { JSP file’s path } 將是 portlet/login/login.portal.jsp。這樣做稱為擴充套件原始 jsp

然後我們可以新增內容:

<%
contentHtml = StringUtil.add("Stuff I'm adding BEFORE the original content", contentHtml,"\n");    
contentHtml = StringUtil.add(contentHtml,"Stuff I'm adding AFTER the original content","\n");
%>
<%= contentHtml %>