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