Transcript Slide 1
JSF Portlet
Copyright © 2000-2007 Liferay, Inc.
All Rights Reserved.
No material may be reproduced electronically or in print without written
permission from Liferay, Inc.
Objective
The goal of this tutorial is to create a Java
Server Faces (JSF) Portlet within Liferay
1. Define the portlet
– portlet.xml
– liferay-portlet.xml
2. Define the page flow and layout
– faces-config.xml
3. Create the JSP
– index.jsp
Directory Structure
Starting with Liferay version 4.2 we've made
it possible to develop portlets in a
deployable *.war format.
This tutorial will adhere to the specs of this
new feature.
Directory Structure
1) Go to:
http://www.liferay.com/web/guest/downloads/samples
2) Download: “Sample JSF MyFaces Portlet”
3) Change the directory name to:
library_jsf_portlet.war
4) This will be a template war that we modify
for this tutorial.
Copy library_jsf_portlet.war to …ext\portlets
Directory Structure
Configuration files (*.xml) are located in this
directory:
…\ext\portlets\library_jsf_portlet.war\WEBINF
JSPs will be placed in this directory:
…\ext\portlets\library_jsf_portlet.war
web.xml
• The web.xml is a standard web application
descriptor file that is required by any J2EE
servlet container such as Tomcat. In this
case we have a *.war file that is being
deployed onto Tomcat, and the web.xml
file describes the portlet application.
• This configures our JSF implementation as
well as the necessary hooks into the
portal.
web.xml
<?xml version="1.0"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>library_jsf_portlet</display-name>
<context-param>
<param-name>company_id</param-name>
<param-value>liferay.com</param-value>
</context-param>
<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>client</param-value>
</context-param>
<context-param>
<param-name>javax.faces.application.CONFIG_FILES</param-name>
<param-value>/WEB-INF/faces-config.xml</param-value>
</context-param>
<listener>
<listenerclass>com.liferay.portal.kernel.servlet.PortletContextListener</listener-class>
</listener>
<listener>
<listenerclass>org.apache.myfaces.webapp.StartupServletContextListener</listenerclass>
</listener>
<servlet>
<servlet-name>library_jsf_portlet</servlet-name>
<servlet-class>com.liferay.portal.kernel.servlet.PortletServlet</servlet-class>
<init-param>
<param-name>portlet-class</param-name>
<paramvalue>com.sample.jsfmyfaces.portlet.MyFacesGenericPortlet</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet>
<servlet-name>FacesServlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>library_jsf_portlet</servletname>
<url-pattern>/library_jsf_portlet/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>FacesServlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<taglib>
<taglib-uri>http://java.sun.com/portlet</taglib-uri>
<taglib-location>/WEB-INF/tld/liferayportlet.tld</taglib-location>
</taglib>
</web-app>
portlet.xml
• The portlet.xml is the portlet descriptor per
the JSR-168 spec.
portlet.xml
<?xml version="1.0"?>
<portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"
version="1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd
http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd">
<portlet>
<portlet-name>library_jsf_portlet</portlet-name>
<display-name>library_jsf_portlet</display-name>
<!--<portlet-class>org.apache.myfaces.portlet.MyFacesGenericPortlet</portletclass>-->
<portlet-class>com.sample.jsfmyfaces.portlet.MyFacesGenericPortlet</portletclass>
<init-param>
<name>default-view</name>
<value>/index.jsp</value>
</init-param>
<supports>
<mime-type>text/html</mime-type>
</supports>
<portlet-info>
<title>Library JSF Portlet</title>
<short-title>Library JSF Portlet</short-title>
<keywords>Library JSF Portlet</keywords>
</portlet-info>
<security-role-ref>
<role-name>guest</role-name>
</security-role-ref>
<security-role-ref>
<role-name>power-user</role-name>
</security-role-ref>
<security-role-ref>
<role-name>user</role-name>
</security-role-ref>
</portlet>
</portlet-app>
liferay-portlet.xml
• The liferay-portlet.xml contains Liferayspecific configurations
liferay-portlet.xml
<?xml version="1.0"?>
<!DOCTYPE liferay-portlet-app PUBLIC "-//Liferay//DTD Portlet
Application 4.1.0//EN" "http://www.liferay.com/dtd/liferay-portletapp_4_1_0.dtd">
<liferay-portlet-app>
<portlet>
<portlet-name>library_jsf_portlet</portlet-name>
<instanceable>true</instanceable>
</portlet>
<role-mapper>
<role-name>administrator</role-name>
<role-link>Administrator</role-link>
</role-mapper>
<role-mapper>
<role-name>guest</role-name>
<role-link>Guest</role-link>
</role-mapper>
<role-mapper>
<role-name>power-user</role-name>
<role-link>Power User</role-link>
</role-mapper>
<role-mapper>
<role-name>user</role-name>
<role-link>User</role-link>
</role-mapper>
</liferay-portlet-app>
liferay-display.xml
• The liferay-display.xml configured display
settings such as which Liferay category
this portlet belongs to.
liferay-display.xml
<?xml version="1.0"?>
<!DOCTYPE display PUBLIC "-//Liferay//DTD Display
4.0.0//EN" "http://www.liferay.com/dtd/liferaydisplay_4_0_0.dtd">
<display>
<category name="category.test">
<portlet id="library_jsf_portlet" />
</category>
</display>
Create the JSP
The next step is to create the JSP
• Create index.jsp in the library directory
…\ext\portlets\library_jsf_portlet.war\index.jsp
• Finally, enter “Simple JSF Portlet!” in index.jsp
index.jsp
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"
%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"
%>
<f:view>
<h1>
<h:outputText value="Simple JSF Portlet" />
</h1>
</f:view>
Include into the build
The next step is to create build file for this portlet. We
must add build targets in the build.xml file.
• Edit build.xml here:
…\ext\portlets\
build.xml
<target name="compile">
<antcall target="compile-module">
<param name="module.name"
value="library_jsf_portlet" />
</antcall>
</target>
<target name="clean">
<antcall target="clean-module">
<param name="module.name"
value="library_jsf_portlet" />
</antcall>
</target>
Deploy the Files to Tomcat
Once you have finished modifying all of the
files, deploy them to Tomcat
• Open up a cmd prompt
– Click “Start”, “Run” and then type “cmd”
• Navigate to your ext\portlets directory and
then type “ant deploy”
• …\ext\portlets>ant deploy
Check the Tomcat Directory
Verify that the files were deployed to Tomcat
• Go to …\tomcat\webapps\ make sure that
library_jsf_portlet was created
• Next, go to
…\tomcat\webapps\library_jsf_portlet\ and
open up index.jsp to see that it was
deployed correctly
Check the Tomcat Directory (p.2)
• Go to
…\tomcat\webapps\library_jsf_portlet\WE
B-INF and open web.xml, portlet.xml,
liferay-portlet.xml, faces-config.xml, and
liferay-display.xml and check to see that
the files were deployed correctly.
Final Steps
1. Restart Tomcat
2. Open up a new browser and type
http://localhost:8080
LOGIN: [email protected]
PASSWORD: test
3. Click Add Content Test
4. Click Library JSF Portlet
Revision History
Edward Shin
Jerry Niu
Jerry Niu
James Min
Ivan Cheung
8/28/2006 Updated for Liferay 4.1.1
9/5/2006-9/8/2006 Updated copyright, copy edits, liferay-portal-ext slide, final
steps slide edit
9/27/2006 Fixed wrong tomcat deploy path
01/17/2007 Converted for JSF in deployable war format
01/30/2007 Added dtd to xml config files