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