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 %>