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