Liferay自带了很多标签库,这极大地提高了开发Liferay项目的效率。
下面让我们一起来探索吧。
什么是标签库?
什么是JSP标签?
什么是JSTL?
标签库由下面这几部分组成:
Tag Library Description(TLD)
Tag Library URI
Tag Library Implementation JAR file
Tag Library Description(TLD) 标签库描述:
每个标签库都会有自己的描述文件,它是一个包含标签信息(标签名,标签属性,哪些属性是必备的,哪些属性是可选的)的xml文件。
Tag Library URI 标签库统一资源标识符:
标签库URI是一个用来定义标签库的唯一标识,它会被JSP页面用来导入标签库。Tag Library URI定义在tld文件中。我们会Tag Library URI写在应用部署文件(web.xml)中,这样就可以把taglib和应用联系起来了。
Tag Library Implementation JAR file 标签库实现JAR文件:
标签库实现JAR文件里面包含的是jsp标签的java实现类。我们需要把这个jar文件包含到application的classpath中,或者把它包含的server的lib目录中。
JSP Tags Libraries的应用:
我们已将知道JSP Tags Libraries只被用到JSP页面中。如果我们想要在Web应用中使用它,则需遵循以下步骤:
在app的deployment描述文件(web.xml)中注册该taglib.
把taglib描述文件(tld)放入WEB-INF文件夹下
把taglib实现jar包地址添加到app的classpath中
在JSP页面中引用Tag Library URI
注册taglib:
如果我们想在app中使用某个taglib,我们需要在app的web.xml文件中注册该taglib.在注册这个taglib的时候,我们需要知道taglibde URI和TLD文件位置。(Liferay Portal的taglib注册在liferay-ce-portal-7.0-ga4\tomcat-8.0.32\webapps\ROOT\WEB-INF\web.xml中)
Example:
<jsp-config>
<taglib>
<taglib-uri>http://liferay.com/tld/aui</taglib-uri>
<taglib-location>/WEB-INF/tld/aui.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://java.sun.com/portlet_2_0</taglib-uri>
<taglib-location>/WEB-INF/tld/liferay-portlet.tld</taglib-location>
</taglib>
</jsp-config>
添加taglib描述文件:
我们需要把taglib的tld文件放在app的WEB-INF文件夹下,或者单独创建一个文件夹来存放,需要注意的是它的位置需要与web.xml文件中的taglib-location保持一致。
(liferay taglib的描述文件放在tomcat-8.0.32\webapps\ROOT\WEB-INF\tld中)
Example:
<taglib-location>/WEB-INF/tld/liferay-portlet.tld</taglib-location>
在app的classpath中添加taglib的实现jar:
每个taglib都有自己的实现jar,如果我们想要在app中使用它,则需要把它添加到app的WEB-INF/lib目录下。(liferay-ce-portal-7.0-ga4\tomcat-8.0.32\webapps\ROOT\WEB-INF\lib\util-taglib.jar)
Example:
For JSTL (jstl-api.jar,jstl-impl.jar)
For Liferay(util-taglib.jar)
在JSP页面中引用taglib:
最后我们需要在JSP页面中引用该标签库。
Example:
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
我们需要提供taglib的URI和Prefix.
Example:
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<portlet:actionURL var="sendUserNotification" windowState="normal" name="sendUserNotification">
</portlet:actionURL>
Liferay JSP Tag Libraries
Liferay提供了如下的JSP Taglibs供开发者使用:
Portlet Tag Library
Liferay Portlet
Liferay Security
Liferay AUI
Liferay Util
Liferay JSP Tag Libraries在Portlet开发中的用法:
在开发Liferay portlet的时候,我们会在JSP页面中大量用到Liferay jsp taglib。有趣的是,你并不需要自己注册这些taglib, 当你把portlet部署到liferay上的时候,liferay会自动帮你注册好,你只需要在JSP中引用该taglib就ok了。
Example:
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<%@ taglib uri="http://liferay.com/tld/aui" prefix="aui" %>
<%@ taglib uri="http://liferay.com/tld/portlet" prefix="liferay-portlet" %>
<%@ taglib uri="http://liferay.com/tld/security" prefix="liferay-security" %>
<%@ taglib uri="http://liferay.com/tld/theme" prefix="liferay-theme" %>
<%@ taglib uri="http://liferay.com/tld/ui" prefix="liferay-ui" %>
<%@ taglib uri="http://liferay.com/tld/util" prefix="liferay-util" %>
下面的地址包含Liferay所有tags的信息:
http://docs.liferay.com/portal/6.2/taglibs/
https://docs.liferay.com/portal/7.0-ga5/taglibs/util-taglib/
Liferay是如何在部署过程中帮你注册的taglib(这只适用于6.2):
当你用Liferay IDE创建一个Portlet插件时,你会发现web.xml中没有taglib的注册信息,WEB-INF目录下没有taglib实现的JAR包与tld文件。这是为什么呢?
下面揭晓答案:当你把你的portlet部署到Liferay portal上的时候,它会部署到server的webapps目录下(tomcat-7.0.42\webapps)
找到部署的portlet,打开它的web.xml文件,你会发现里面已经注册了所有的taglib.
Example:/tomcat-7.0.42/webapps/DockBarCustomNotification-portlet/WEB-INF/web.xml
<jsp-config>
<taglib>
<taglib-uri>http://liferay.com/tld/aui</taglib-uri>
<taglib-location>/WEB-INF/tld/aui.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://java.sun.com/portlet_2_0</taglib-uri>
<taglib-location>/WEB-INF/tld/liferay-portlet.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://liferay.com/tld/portlet</taglib-uri>
<taglib-location>/WEB-INF/tld/liferay-portlet-ext.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://liferay.com/tld/security</taglib-uri>
<taglib-location>/WEB-INF/tld/liferay-security.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://liferay.com/tld/theme</taglib-uri>
<taglib-location>/WEB-INF/tld/liferay-theme.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://liferay.com/tld/ui</taglib-uri>
<taglib-location>/WEB-INF/tld/liferay-ui.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://liferay.com/tld/util</taglib-uri>
<taglib-location>/WEB-INF/tld/liferay-util.tld</taglib-location>
</taglib>
</jsp-config>
同理,打开/tomcat-7.0.42/webapps/DockBarCustomNotification-portlet/WEB-INF/tld文件夹,你会发现所有的taglib tld文件都在里面。
Example:
aui.tld
liferay-portlet.tld
liferay-portlet-ext.tld
liferay-security.tld
liferay-theme.tld
liferay-ui.tld
liferay-util.tld
我们知道每个taglib都有一个实现的jar,Liferay把所有的libraries实现类打成了一个jar包util-taglib.jar。
你可以在下面目录下找到它(/tomcat-7.0.42/webapps/DockBarCustomNotification-portlet/WEB-INF/lib)
Note: Liferay只会自动注册liferay taglibs,而不会注册JSTL taglibs.
在Liferay Portlet中运用JSTL Tag Libraries(同样只适用于6.2)
由于Liferay只会自动注册liferay taglibs,那如果我们想要使用JSTL tag libraries如Core Tags ,Formatting tags ,SQL tags ,XML tags ,JSTL Functions 该怎么办呢?
假设我们需要使用JSTL core tag library
在liferay-plugin-package.properties文件中添加
portal-dependency-jars=\
jstl-api.jar,\
jstl-impl.jar
portal-dependency-tlds=c.tld
2. 然后部署到portal上,Liferay就可以帮我们自己处理了