Java Developer Technology - Web Space Deep Dive Examples

Introduction

This page contains several examples used in the recent Web Space Deep Dive interview and presentation.
The below table contains pointers to examples that can be used directly to develop applications on GlassFish Web Space Server. Click on each of the links to see the code, and copy it into the appropriate files (following the Deep Dive webcast). For more information visit the Web Space Server homepage.

Files

Filename (click to see code)
Description
MovieDataEntry_view.jsp
MovieDataEntry_view.jsp
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>

<%@ page import="javax.portlet.*"%>
<%@ page import="com.example.service.model.*"%>
<%@ page import="com.example.service.service.*"%>
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet"%>
<%@ taglib uri="http://liferay.com/tld/ui" prefix="ui"%>

<portlet:defineObjects />
<%PortletPreferences prefs = renderRequest.getPreferences();%>

<%
Class modelClazz = Movie.class;
%>


<% String msg = request.getParameter("message");
if (msg == null || msg.length() == 0) {
	msg = "Enter Movie Information";
} %>

<ui:message key="<%=msg%>"/>

<p>
	<form method="POST" action="<portlet:actionURL/>">
		<table class="lfr-table">
			<tr>
				<td>
					Movie Name:
				</td>
				<td>
					<ui:input-field fieldParam="name" field="name" model="<%=modelClazz%>"/>
				</td>
			</tr>
			<tr>
				<td>
					Cast:
				</td>
				<td>
					<ui:input-field fieldParam="starring" field="thecast" model="<%=modelClazz%>"/>
				</td>
			</tr>
			<tr>
				<td>
					Story:
				</td>
				<td>
					<ui:input-textarea param="story"/>
				</td>
			</tr>
			<tr>
				<td>
					Release Date:
				</td>
				<td>
					<ui:input-date dayParam="dp" monthParam="mp" yearParam="yp" yearRangeStart="2007" yearRangeEnd="2050"/>
				</td>
			</tr>
			<tr>
				<td>
				</td>
				<td>
					<input align="RIGHT" type="submit" value="Enter"/>
				</td>
			</tr>
		</table>
	</form>
View JSP for entering initial movie data
MovieDataEntryPortlet.java
MovieDataEntryPortlet.java
package com.example;
import com.example.service.model.Movie;
import com.example.service.service.MovieLocalServiceUtil;
import com.liferay.portal.SystemException;
import javax.portlet.GenericPortlet;
import javax.portlet.ActionRequest;
import javax.portlet.RenderRequest;
import javax.portlet.ActionResponse;
import javax.portlet.RenderResponse;
import javax.portlet.PortletException;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.portlet.PortletRequestDispatcher;

/**
 * MovieDataEntryPortlet Portlet Class
 */
public class MovieDataEntryPortlet extends GenericPortlet {

  @Override
  public void processAction(ActionRequest request, ActionResponse response) throws PortletException,IOException {
		String name = request.getParameter("name");
		String starrings = request.getParameter("starring");
		String story = request.getParameter("story");
		String dp = request.getParameter("dp");
		String mp = request.getParameter("mp");
		String yp = request.getParameter("yp");
		String dateString = yp + "/" + mp + "/" + dp;
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/mm/dd");
		Date convertedDate = null;

		try {
			convertedDate = dateFormat.parse(dateString);

		} catch (ParseException ex) {
			ex.printStackTrace();
		}

		Movie m = MovieLocalServiceUtil.createMovie(name);
		m.setThecast(starrings);
		m.setReleaseDate(convertedDate);
		m.setStory(story);
		try {
			MovieLocalServiceUtil.addMovie(m);
			response.setRenderParameter("message", "Added Movie Succesfully.");
		} catch (SystemException ex) {
			Logger.getLogger(MovieDataEntryPortlet.class.getName()).log(Level.SEVERE, null, ex);
			response.setRenderParameter("message", "Unable to add Movie.");
		}


    }

	@Override
    public void doView(RenderRequest request,RenderResponse response) throws PortletException,IOException {
        response.setContentType("text/html");
        PortletRequestDispatcher dispatcher =
        getPortletContext().getRequestDispatcher("/WEB-INF/jsp/MovieDataEntry_view.jsp");
        dispatcher.include(request, response);
    }
}


Java Portlet source code for Movie Data Entry portlet
MovieList_view.jsp
MovieList_view.jsp
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>

<%@ page import="javax.portlet.*"%>
<%@ page import="java.util.*"%>
<%@ page import="com.example.service.model.*"%>
<%@ page import="com.example.service.service.*"%>
<%@ page import="com.liferay.portal.kernel.dao.search.*"%>
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet"%>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%>
<%@ taglib uri="http://liferay.com/tld/ui" prefix="ui"%>

<portlet:defineObjects />
<%PortletPreferences prefs = renderRequest.getPreferences();%>

<%
	List headers = new ArrayList();
	headers.add("Movies");
	headers.add("Release Date");
	SearchContainer sc = new SearchContainer();
	sc.setHeaderNames(headers);
	sc.setEmptyResultsMessage("No movies found");
	List resultRows = sc.getResultRows();
	Collection<Movie> movies = MovieLocalServiceUtil.getMovies();
	Iterator<Movie> it = movies.iterator();
	int i = 0;
	while (it.hasNext()) {
		Movie m = it.next();
		ResultRow row = new ResultRow(m.getName(), m.getName(), i++);
		PortletURL url = renderResponse.createActionURL();
		url.setParameter("movie_name", m.getName());
		row.addText(m.getName(), url);
		Date d = m.getReleaseDate();
		String ds = "";
		if (d != null) {
			ds = d.toString();
		}
		row.addText(ds);
		resultRows.add(row);
	}

%>

<ui:search-iterator paginate="false" searchContainer="<%=sc%>"/>


View JSP for viewing movie data
MovieListPortlet.java
MovieListPortlet.java
import javax.portlet.GenericPortlet;
import javax.portlet.ActionRequest;
import javax.portlet.RenderRequest;
import javax.portlet.ActionResponse;
import javax.portlet.RenderResponse;
import javax.portlet.PortletException;
import java.io.IOException;
import javax.portlet.PortletRequestDispatcher;
import javax.xml.namespace.QName;

/**
 * MovieListPortlet Portlet Class
 */
public class MovieListPortlet extends GenericPortlet {

    public void processAction(ActionRequest request, ActionResponse response) throws PortletException,IOException {
		try {
			QName qName = new QName("http://sun.com/webspace/moviesample", "moveName", "x");
			String moveName_Data = request.getParameter("movie_name");
			response.setEvent(qName, moveName_Data);
		} catch (Exception e) {
			e.printStackTrace();
		}

    }

    public void doView(RenderRequest request,RenderResponse response) throws PortletException,IOException {
        response.setContentType("text/html");
        PortletRequestDispatcher dispatcher =
        getPortletContext().getRequestDispatcher("/WEB-INF/jsp/MovieList_view.jsp");
        dispatcher.include(request, response);
    }
}


Java Portlet source code for Movie Data viewer
movieservice.xml
movieservice.xml
<?xml version="1.0"?>
<!DOCTYPE service-builder PUBLIC "-//Liferay//DTD Service Builder 5.1.0//EN" "http://www.liferay.com/dtd/liferay-service-builder_5_1_0.dtd">
<service-builder package-path="com.example.service">
    <namespace>sample</namespace>
	 <entity name='Movie' table='t_movie' local-service='true' remote-service='true'>
                <column name='name' type='String' primary='true'>
                </column>
                <column name='story' type='String'>
                </column>
                <column name='releaseDate' type='Date'>
                </column>
                <column name='thecast' type='String'>
                </column>
        </entity>
        <entity name='MovieFeedback' table='t_moviefeedback' local-service='true' remote-service='true'>
                <column name='id' type='long' primary='true'>
                </column>
                <column name='movieName' type='String'>
                </column>
                <column name='rating' type='String'>
                </column>
                <column name='feedback' type='String'>
                </column>
                <finder name='MovieName' return-type='Collection'>
                        <finder-column name='movieName'>
                        </finder-column>
                </finder>
        </entity>
</service-builder>


Service definition for movie and movie feedback data
MovieLocalServiceImpl.java (snippet)
MovieLocalServiceImpl.java
	public Collection<Movie> getMovies() {
		try {
			return moviePersistence.findAll();
		} catch (SystemException ex) {
			Logger.getLogger(MovieFeedbackLocalServiceImpl.class.getName()).log(Level.SEVERE, null, ex);
		}

		return Collections.EMPTY_LIST;
	}


Utility method for retrieving movie data
MovieFeedbackLocalServiceImpl.java (snippet)
MovieFeedbackLocalServiceImpl.java
	public Collection<MovieFeedback> getMovieFeedbacks(String name) {
		try {
			return movieFeedbackPersistence.findByMovieName(name);
		} catch (SystemException ex) {
			Logger.getLogger(MovieFeedbackLocalServiceImpl.class.getName()).log(Level.SEVERE, null, ex);
		}

		return Collections.EMPTY_LIST;
	}


Utility method for retrieving movie feedback data
FeedbackViewer_view.jsp
FeedbackViewer_view.jsp
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>

<%@ page import="javax.portlet.*"%>
<%@ page import="java.util.*"%>
<%@ page import="com.example.service.model.*"%>
<%@ page import="com.example.service.service.*"%>
<%@ page import="com.liferay.portal.kernel.dao.search.*"%>
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet"%>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%>
<%@ taglib uri="http://liferay.com/tld/ui" prefix="ui"%>

<portlet:defineObjects />
<%PortletPreferences prefs = renderRequest.getPreferences();%>

<%
String movieName = renderRequest.getParameter("movie_name");
Collection<MovieFeedback> feedbacks = null;
if (movieName != null) {
	feedbacks = MovieFeedbackLocalServiceUtil.getMovieFeedbacks(movieName);
} else {
	movieName = "Select a movie to view feedback";
}
%>

<%=movieName%><br>

<%
	if (feedbacks != null) {
		int i = 1;
		for (MovieFeedback mf:feedbacks) {
%>
			<br><b>Feedback<%=i++%></b><br>

			<%=mf.getFeedback()%>
<%
		}
	}
%>


View JSP for viewing movie feedback
MovieFeedback.java (snippet)
MovieFeedback.java
	public String button1_action() {
		try {
			int count = MovieFeedbackLocalServiceUtil.getMovieFeedbacksCount();
			com.example.service.model.MovieFeedback mf = MovieFeedbackLocalServiceUtil.createMovieFeedback(++count);
			mf.setMovieName(getRequestBean1().getMovieName());
			mf.setFeedback(getRequestBean1().getFeedback());
			MovieFeedbackLocalServiceUtil.addMovieFeedback(mf);
		} catch (SystemException ex) {
			Logger.getLogger(MovieFeedback.class.getName()).log(Level.SEVERE, null, ex);
		}

		return "success";
	}
Action handler code for feedback entry portlet
Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.
  1. Jun 22

    raaaaa says:

    Could you provide full source code ? It would be great for beginners.

    Could you provide full source code ? It would be great for beginners.

  2. Aug 18

    exboy1. says:

    download the Developers guide at http://dlc.sun.com/pdf/820-7050/820-7050.pdf . ...

    download the Developers guide at http://dlc.sun.com/pdf/820-7050/820-7050.pdf . Then you can use the codes when following the guide.

  3. Aug 27

    adavila says:

    What need to add to portlet.xml in order to work portlet intercomunication betwe...

    What need to add to portlet.xml in order to work portlet intercomunication between MovieListPortlet.java and FeedbackViewer_view.jsp?

    This because you are using

    try

    Unknown macro: { QName qName = new QName("http}

    catch (Exception e)

    Unknown macro: { e.printStackTrace(); }

    in this case i use
    QName qName = new QName("http://localhost:8080/moveName", "moveName", "x");

    and i added to portlet.xml

    <event-definition>
    <qname xmlns:x="http://localhost:8080/moveName">x:moveName</qname>
    <value-type>java.lang.String</value-type>
    </event-definition>

    NO ERRORS but does not work

Sign up or Log in to add a comment or watch this page.


The individuals who post here are part of the extended Sun Microsystems community and they might not be employed or in any way formally affiliated with Sun Microsystems. The opinions expressed here are their own, are not necessarily reviewed in advance by anyone but the individual authors, and neither Sun nor any other party necessarily agrees with them.

Copyright 1994-2009 Sun Microsystems, Inc.
Powered by Atlassian Confluence
Sun Guidelines on Public Discourse Privacy Policy Terms of Use Trademarks Site Map Employment Investor Relations Contact