Introduction:
Liferay MVC is portlet frame work given by Liferay and it is specific to liferay environment.
We already well aware of Liferay MVC frame work form Liferay Savvyprevious articles.
LiferayMVC Portlet Development Introduction
LiferayMVC Portlet Development with Liferay IDE
LiferayMVC Portlet Form Submission
Environment:
Liferay IDE 2.x+Eclipse (Kepler) +Liferay Plugins SDK 6.2+Tomcat 7.x Liferay Portal Bundle
__Note:__
Please go through above three articles then you will be much aware of Liferay MVC framework and its use in portlet development.
Now we will see how liferay portlet interact with database to store the data and fetch the data from database.
Database interaction is like Insert, Delete, and Read and Update the data in database.
We already know there are many technologies in Java that is java applications connect to database and do CRUD operations.
Mainly when we are talking about Database interaction we are very much familiar with JDBC. Similarly if go little bit advanced concept then Hibernate comes into picture.
Liferay also have used JDBC and Hibernate concepts to interact with database and it will perform CRUD operations.
But we never write any legacy JDBC java code or Hibernate code when we work with database interaction all the code already abstracted and we will use simple Util classes and its method to perform operations.
Liferay implemented many classes and interfaces so that we can develop database interaction portlet pretty easy.
We have two ways to connection data base in Liferay
Legacy JDBC Code
Liferay have implemented some classes and it use simple JDBC code to interact with database.
These classes are available in Liferay Kernel level so that we can use anywhere in Plugin portlet development.
We have class called DataAccess so that we can use this class to get the Connection object once we get the connection reaming all are like simple JDBC code to connect to database and perform operations.
The following is simple code using Data Access Class
import java.io.IOException;
import java.sql.SQLException;
import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.PortletException;
import com.liferay.portal.kernel.dao.jdbc.DataAccess;
import com.liferay.util.bridges.mvc.MVCPortlet;
public class StudentMVCPortletAction extends MVCPortlet {
public void getStudent(ActionRequest actionRequest,
ActionResponse actionResponse) throws IOException,
PortletException, SQLException {
java.sql.Connection con = null;
java.sql.Statement st = null;
try {
con = DataAccess.getConnection();
st = con.createStatement();
java.sql.ResultSet rs = st.executeQuery("SELECT * FROM Student");
while (rs.next()) {
String firstName = rs.getString("firstName");
String lastName = rs.getString("lastName");
System.out.println("Student FirstName:" + firstName);
System.out.println("Student Last Name:" + lastName);
}
} catch (Exception e) {
} finally {
st.close();
con.close();
}
}
}
__Note:__
This is very Legacy JDBC code and we won't use in real portlet development. We will use above method in some of specific scenarios.
Liferay Service Builder
Liferay Service Builder is tool to generate database interaction layer/service layer to the portlet.
Service layer consist of set of classes and interfaces so that we can use these classes to interact with database and perform database operation in portlet.
Service Builder tool help us to generate service layer so that developer need not worry about persistence code and need to concentrate on business logic.
Generally in the application development we need database service layer and the operations we used in persistence layer is common i.e. CRUD operations.
Instead writing same CRUD operation persistence logic for multiple times we have a tool in Liferay so that it will be generated all classes and interfaces and developer need not to worry about persistence logic he/she can concentrate only on writing business logic.
Liferay Service Builder is simple ANT script when we run ant target then all classes and interfaces will be created.
When we create Liferay MVC Portlet using Plugins SDK then portlet consists of ANT build file and the build file have service builder related target by default.
Liferay Service Builder used Spring Hibernate DAO implementation to create the services.
After successfully run service builder we can see many configuration files and java implementation classes all are following spring hibernate DAO implementation mechanism.
More details about Liferay Service Builder follow the article
LiferayService Builder Underlying Concept
The following are the steps to Generate Service Layer in Portlet.
Create simple Liferay MVC portlet using Liferay IDE in eclipse
Firs we need to create simple Liferay MVC portlet using Liferay IDE in eclipse. This is very simple to create in eclipse.
Go through below article to create simple Liferay MVC Portlet
LiferayMVC Portlet Development with Liferay IDE
Create Service.xml file in Portlet WEB-INF directory
Now we need to create service.xml file in portlet WEB-INF directory. This is the configuration file to service builder tool and Service Builder use configuration file to generate required services (classes, interfaces) to portlet and these services provided the database interactions from the portlet.
The following screen shows service.xml file in portlet WEB-INF directory
__Note:__
In eclipse with Liferay IDE we have option to create service.xml with sample entity using GUI interface.
We can also create manually in the above specified location or we can use Liferay IDE to create service.xml file.
Define required entities/tables in service.xml
Now we need to defined required entities in service.xml file so that service builder will generate services for defined entities/tables.
service.xml consist of defined tags from which we will define the entities. Tags information is available in service builder DTD file.
When we define entity we need to specify primary key column, column data type, column name and other required things. All the tags information is based on its DTD.
The following is service builder DTD we can get more information about service builder tags for service.xml
Assume we have an entity/table Student
The following is service.xml entity configuration
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE service-builder PUBLIC "-//Liferay//DTD Service Builder 6.2.0//EN"
"http://www.liferay.com/dtd/liferay-service-builder_6_2_0.dtd">
<service-builder package-path="com.meera.dbservice">
<author>LiferaySavvy</author>
<namespace>LS</namespace>
<entity name="Student" local-service="true" remote-service="true">
<!-- PK fields -->
<column name="studentId" type="long" primary="true" />
<column name="firstName" type="String" />
<column name="lastName" type="String" />
<column name="studentAge" type="int" />
<column name="studentGender" type="int" />
<column name="studentAddress" type="String" />
<!-- Order -->
<order by="asc">
<order-column name="studentId" />
</order>
<!-- Finder methods -->
<finder name="byGender" return-type="Collection">
<finder-column name="studentGender"/>
</finder>
</entity>
</service-builder>
Run the Service builder
Once we completed the configuration now we need run service builder. We can run the service builder in eclipse from ANT view. We need to click onbuild-service target from the ANT view
In normal ant command for run service builder as follows
ant build-service
The following is ANT build-service in eclipse ant view
The following is screen to show build success
Once we run service builder it will generate many classes and interfaces. All interfaces will be packages as jar file and it will be available in _WEB-INF/lib_directory.
It will also generate the required SQL script and it will be executed when we deploy the portlet so that required tables and indexes will be created in database. You can see the script in sql (docroot\WEB-INF\sql) directory of portlet.
The table name which is creates in database will be service buildernamespace_entity name which we have given in service.xml
In the above example the table the name in database is LS_Student
The following screen shows services after run service builder
Using Generated Database services in Portlet Development
Once we generated the services then we can use in portlet development
We already know we have used Student entity in service.xml so that we will get many services related to Student entity/table. We will use Util classes to interact with database.
It will generate many classes and interfaces but we will use only Util java classes in portlet development.
The following are main java Util classes
XXXServiceUtil
XXXLocalServiceUtil
XXXUtil
XXX is entity name which we have given in service.xml and our example its Student
StudetLocalServiceUtil
StudentServiceUtil
StudentUtil
Mostly we will use Util class's related methods to perform database CRUD operations.
__Add /Create record __
When we create or add record to the table first we need create persistence object and need to fill the data in object then finally add to the table using_XXXLocalServiceUtil.addXXX()_ method.When we create persistence object we need a primary key so we will use _CounterLocalServiceUtil.increment()_to create unique id for the record.
The following is code snippet to add record to the table.
Type: 1
//create primary key
long studentId=CounterLocalServiceUtil.increment();
//create student persistance object
Student student=null;
student=StudentLocalServiceUtil.createStudent(studentId);
//fill the data in persistance object
student.setFirstName(firstName);
student.setLastName(lastName);
student.setStudentAge(studentAge);
student.setStudentGender(studentGender);
student.setStudentAddress(address);
//Add student persistance object to database student table
student=StudentLocalServiceUtil.addStudent(student);
Note:
In the above code we are creating primary key using Counter Service.
Type: 2
Student student=null;
student=new StudentImpl();
//fill the data in persistance object
student.setFirstName(firstName);
student.setLastName(lastName);
student.setStudentAge(studentAge);
student.setStudentGender(studentGender);
student.setStudentAddress(address);
//Add student persistance object to database student table
student=StudentLocalServiceUtil.addStudent(student);
__Note:__
In the above code we are creating persistence object with new operator so primary key will be auto generated.
In the both cases it will return student object if the record added successfully otherwise it will return null value.
__Update Record__
To update record first we need to get existed record with primary and need to fill new updated information in persistence object then we will update record.
The following is code snippet to update record.
Student student=StudentLocalServiceUtil.getStudent(studentId);
//fill update information
student.setFirstName(firstName);
student.setLastName(lastName);
student.setStudentAge(studentAge);
student.setStudentGender(studentGender);
student.setStudentAddress(address);
student=StudentLocalServiceUtil.updateStudent(student);
__Note:__
Once data is updated it will return updated persistence object.
__Delete Record__
We need primary key to delete the record.
The following is code for delete record
long studentId = ParamUtil.getLong(actionRequest,"studentId");
Student student=StudentLocalServiceUtil.deleteStudent(studentId);
We can also delete record by object
Student student=StudentLocalServiceUtil.getStudent(studentId);
student=StudentLocalServiceUtil.deleteStudent(student);
__Note:__
Once record is deleted it will return deleted persistence object.
__Show Data/Record__
We have different methods to get the records we can get single record by primary key and we can fetch all records too.
We can also fetch the record by using columns based these methods are available in XXXUtil methods. We have many finder methods and all finder methods will be available in XXXUtil class.
To create any finder methods on required columns then we need to add configuration in service.xml file so that finder methods will be created to specific columns.
The following is simple tag which will generate finder method and it fetch the record based on given column
<entity name="Student" local-service="true" remote-service="true">
<!-- PK field -->
<column name="studentId" type="long" primary="true" />
<column name="firstName" type="String" />
<column name="lastName" type="String" />
<column name="studentAge" type="int" />
<column name="studentGender" type="int" />
<column name="studentAddress" type="String" />
<!-- Finder methods -->
<finder name="byGender" return-type="Collection">
<finder-column name="studentGender"/>
</finder>
</entity>
__Note:__
We will see more about finder methods in future articles.
The following are code snippets to fetch records.
Get Record by Primary Key
Student student=StudentLocalServiceUtil.getStudent(studentId);
Get all records
List<Student> studentList=
StudentLocalServiceUtil.getStudents(0,
StudentLocalServiceUtil.getStudentsCount());
The following are the available methods in StudentLocalService.java interface
public com.meera.dbservice.model.Student addStudent(
com.meera.dbservice.model.Student student)
throwscom.liferay.portal.kernel.exception.SystemException;
public com.meera.dbservice.model.Student createStudent(long studentId);
public com.meera.dbservice.model.Student deleteStudent(
com.meera.dbservice.model.Student student)
throwscom.liferay.portal.kernel.exception.SystemException;
public java.util.List dynamicQuery(
com.liferay.portal.kernel.dao.orm.DynamicQuery dynamicQuery)
throwscom.liferay.portal.kernel.exception.SystemException;
public long dynamicQueryCount(
com.liferay.portal.kernel.dao.orm.DynamicQuery dynamicQuery)
throwscom.liferay.portal.kernel.exception.SystemException;
public java.util.List<com.meera.dbservice.model.Student> getStudents(
int start, int end)
throwscom.liferay.portal.kernel.exception.SystemException;
public int getStudentsCount()
throwscom.liferay.portal.kernel.exception.SystemException;
public com.meera.dbservice.model.Student updateStudent(
com.meera.dbservice.model.Student student)
throwscom.liferay.portal.kernel.exception.SystemException;
public com.meera.dbservice.model.Student deleteStudent(long studentId)
throwscom.liferay.portal.kernel.exception.PortalException,
com.liferay.portal.kernel.exception.SystemException;
public com.meera.dbservice.model.Student addStudent(
com.meera.dbservice.model.Student student)
throwscom.liferay.portal.kernel.exception.SystemException;
public com.meera.dbservice.model.Student createStudent(long studentId);
__Important Points__
__Note:__
There are many things behind Liferay Service Builder we will see more details in coming articles.
Download Portlet
https://sourceforge.net/projects/meeralferay/files/LiferayMVCServiceBuilderPortlet/
__Portlet Screens:__
Default View
Add student
Update student
Delete Student
Display Student
Complete Code of Student Liferay MVC Service Builder Portlet
Portlet Action Class (StudentMVCPortletAction.java)
package com.meera.liferaymvc;
import java.io.IOException;
import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.PortletException;
import com.liferay.counter.service.CounterLocalServiceUtil;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.servlet.SessionErrors;
import com.liferay.portal.kernel.servlet.SessionMessages;
import com.liferay.portal.kernel.util.ParamUtil;
import com.liferay.util.bridges.mvc.MVCPortlet;
import com.meera.dbservice.model.Student;
import com.meera.dbservice.model.impl.StudentImpl;
import com.meera.dbservice.service.StudentLocalServiceUtil;
public class StudentMVCPortletAction extends MVCPortlet {
public void addStudent(ActionRequest actionRequest,
ActionResponse actionResponse) throws IOException, PortletException {
try {
String firstName = ParamUtil.getString(actionRequest, "firstName");
String lastName = ParamUtil.getString(actionRequest, "lastName");
int studentAge = ParamUtil.getInteger(actionRequest, "studentAge");
int studentGender = ParamUtil.getInteger(actionRequest, "sex", 1);
String address = ParamUtil.getString(actionRequest, "address");
// add student record
// create primary key
long studentId = CounterLocalServiceUtil.increment();
// create student persistance object
Student student = null;
student = new StudentImpl();
student = StudentLocalServiceUtil.createStudent(studentId);
// fill the data in persistance object
student.setFirstName(firstName);
student.setLastName(lastName);
student.setStudentAge(studentAge);
student.setStudentGender(studentGender);
student.setStudentAddress(address);
// Add student persistance object to database student table
student = StudentLocalServiceUtil.addStudent(student);
if (student != null) {
// adding success message
SessionMessages.add(actionRequest.getPortletSession(),
"student-add-success");
_log.info("Student have been added successfylly");
} else {
SessionErrors.add(actionRequest.getPortletSession(),
"student-add-error");
_log.error("There is an Erron in adding Student");
}
// navigate to add student jsp page
actionResponse.setRenderParameter("mvcPath",
"/html/jsps/add_student.jsp");
} catch (Exception e) {
SessionErrors.add(actionRequest.getPortletSession(),
"student-add-error");
e.printStackTrace();
}
}
public void deleteStudent(ActionRequest actionRequest,
ActionResponse actionResponse) throws IOException, PortletException {
try {
long studentId = ParamUtil.getLong(actionRequest, "studentId");
Student student = StudentLocalServiceUtil.deleteStudent(studentId);
if (student != null) {
// adding success message
SessionMessages.add(actionRequest.getPortletSession(),
"student-delete-success");
_log.info("Student have been deleted successfylly");
} else {
SessionErrors.add(actionRequest.getPortletSession(),
"student-delete-error");
_log.error("There is an Erron in delete Student");
}
// navigate to add student jsp page
actionResponse.setRenderParameter("mvcPath",
"/html/jsps/delete_student.jsp");
} catch (Exception e) {
SessionErrors.add(actionRequest.getPortletSession(),
"student-add-error");
e.printStackTrace();
}
}
public void updateStudent(ActionRequest actionRequest,
ActionResponse actionResponse) throws IOException, PortletException {
try {
long studentId = ParamUtil.getLong(actionRequest, "studentId");
String firstName = ParamUtil.getString(actionRequest, "firstName");
String lastName = ParamUtil.getString(actionRequest, "lastName");
int studentAge = ParamUtil.getInteger(actionRequest, "studentAge");
int studentGender = ParamUtil.getInteger(actionRequest, "sex", 1);
String address = ParamUtil.getString(actionRequest, "address");
Student student = StudentLocalServiceUtil.getStudent(studentId);
if (student != null) {
// fill update information
student.setFirstName(firstName);
student.setLastName(lastName);
student.setStudentAge(studentAge);
student.setStudentGender(studentGender);
student.setStudentAddress(address);
student = StudentLocalServiceUtil.updateStudent(student);
if (student != null) {
// adding success message
SessionMessages.add(actionRequest.getPortletSession(),
"student-update-success");
_log.info("Student have been updated successfylly");
} else {
SessionErrors.add(actionRequest.getPortletSession(),
"student-update-error");
_log.error("There is an Erron in delete Student");
}
} else {
SessionErrors.add(actionRequest.getPortletSession(),
"student-update-error");
_log.error("Could not find student.");
}
// navigate to add student jsp page
actionResponse.setRenderParameter("mvcPath",
"/html/jsps/update_student.jsp");
} catch (Exception e) {
SessionErrors.add(actionRequest.getPortletSession(),
"student-update-error");
e.printStackTrace();
}
}
public void getStudent(ActionRequest actionRequest,
ActionResponse actionResponse) throws IOException, PortletException {
try {
long studentId = ParamUtil.getLong(actionRequest, "studentId");
String cmd = ParamUtil.getString(actionRequest, "cmd");
Student student = StudentLocalServiceUtil.getStudent(studentId);
if (student != null) {
// adding success message
actionRequest.setAttribute("studentObject", student);
_log.info("Student have been found for specific primary key successfylly");
} else {
_log.error("Stundet not found");
}
if (cmd.equals("DELETE")) {
// navigate to add student jsp page
actionResponse.setRenderParameter("mvcPath",
"/html/jsps/delete_student.jsp");
}
if (cmd.equals("UPDATE")) {
// navigate to add student jsp page
actionResponse.setRenderParameter("mvcPath",
"/html/jsps/update_student.jsp");
}
if (cmd.equals("VIEW")) {
// navigate to add student jsp page
actionResponse.setRenderParameter("mvcPath",
"/html/jsps/display_student.jsp");
}
} catch (Exception e) {
SessionErrors.add(actionRequest.getPortletSession(),
"student-add-error");
e.printStackTrace();
}
}
private static Log _log = LogFactoryUtil
.getLog(StudentMVCPortletAction.class);
}
Default View JSP Page (/html/jsps/view.jsp)
<%@ taglib uri="http://liferay.com/tld/portlet" prefix="liferay-portlet"%>
<%@ taglib uri="http://liferay.com/tld/theme" prefix="liferay-theme" %>
<%@ taglib uri="http://liferay.com/tld/ui" prefix="liferay-ui" %>
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<portlet:defineObjects />
<liferay-theme:defineObjects />
<h1>Liferay Service Builder/ Student CRUD Operations</h1>
<portlet:renderURL var="addStudent">
<portlet:param name="mvcPath" value="/html/jsps/add_student.jsp"/>
</portlet:renderURL>
<portlet:renderURL var="updateStudent">
<portlet:param name="mvcPath" value="/html/jsps/update_student.jsp"/>
</portlet:renderURL>
<portlet:renderURL var="dislayStudent">
<portlet:param name="mvcPath" value="/html/jsps/display_student.jsp"/>
</portlet:renderURL>
<portlet:renderURL var="deleteStudent">
<portlet:param name="mvcPath" value="/html/jsps/delete_student.jsp"/>
</portlet:renderURL>
<br/>
<a href="<%=addStudent.toString()%>">Add Student</a><br/>
<a href="<%=updateStudent.toString()%>">Update Student</a><br/>
<a href="<%=deleteStudent.toString()%>">Delete Student</a><br/>
<a href="<%=dislayStudent.toString()%>">Display Student</a><br/>
Add Student JSP Page (/html/jsps/add_student.jsp)
<%@page import="com.liferay.portal.kernel.servlet.SessionErrors"%>
<%@page import="com.liferay.portal.kernel.servlet.SessionMessages"%>
<%@ taglib uri="http://liferay.com/tld/portlet" prefix="liferay-portlet"%>
<%@ taglib uri="http://liferay.com/tld/theme" prefix="liferay-theme" %>
<%@ taglib uri="http://liferay.com/tld/ui" prefix="liferay-ui" %>
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<portlet:defineObjects />
<portlet:renderURL var="homeURL"></portlet:renderURL>
<portlet:actionURL var="addStudentActionURL" windowState="normal"
name="addStudent">
</portlet:actionURL>
<% if(SessionMessages.contains(renderRequest.
getPortletSession(),"student-add-success")){%>
<liferay-ui:success key="student-add-success" message="Student information
have been added successfully." />
<%} %>
<% if(SessionErrors.contains(renderRequest.getPortletSession(),
"student-add-error")){%>
<liferay-ui:error key="student-add-error" message="There is an
Error occured while adding student please try again" />
<%} %>
<h2>Add Student</h2>
<a href="<%=homeURL.toString() %>">Home</a><br/><br/>
<form action="<%=addStudentActionURL%>" name="studentForm" method="POST">
<b>First Name</b><br/>
<input type="text" name="<portlet:namespace/>firstName" id="<portlet:namespace/>firstName"/><br/>
<b>Last Name</b><br/>
<input type="text" name="<portlet:namespace/>lastName"
id="<portlet:namespace/>lastName"/><br/>
<b>Age</b><br/>
<input type="text" name="<portlet:namespace/>studentAge" id="<portlet:namespace/>studentAge"/><br/>
<b>Gender</b><br/>
<input type="radio" name="<portlet:namespace/>sex" value="1">Male<br>
<input type="radio" name="<portlet:namespace/>sex" value="0">Female<br/>
<b>Address</b><br/>
<textarea rows="4" cols="50" name="<portlet:namespace/>address">
</textarea><br/>
<input type="submit" name="addStudent" id="addStudent" value="Add Student"/>
</form>
Update Student JSP Page (/html/jsps/update_student.jsp)
<%@page import="com.liferay.portal.kernel.servlet.SessionErrors"%>
<%@page import="com.liferay.portal.kernel.servlet.SessionMessages"%>
<%@page import="com.meera.dbservice.service.StudentLocalServiceUtil"%>
<%@page import="java.util.List"%>
<%@page import="com.meera.dbservice.model.Student"%>
<%@page import="com.liferay.portal.kernel.servlet.SessionErrors"%>
<%@page import="com.liferay.portal.kernel.servlet.SessionMessages"%>
<%@ taglib uri="http://liferay.com/tld/portlet" prefix="liferay-portlet"%>
<%@ taglib uri="http://liferay.com/tld/theme" prefix="liferay-theme" %>
<%@ taglib uri="http://liferay.com/tld/ui" prefix="liferay-ui" %>
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<portlet:defineObjects />
<portlet:renderURL var="homeURL"></portlet:renderURL>
<portlet:actionURL var="updateStudentActionURL" windowState="normal"
name="updateStudent">
</portlet:actionURL>
<portlet:actionURL var="getStudentActionURL" windowState="normal"_name="getStudent"_>
<portlet:param name="cmd" _value="UPDATE"_/>
</portlet:actionURL>
<h2>Update Student</h2>
<a href="<%=homeURL.toString() %>">Home</a><br/><br/>
<%if(SessionMessages.contains(renderRequest.getPortletSession(),"student-update-success")){%>
<liferay-ui:success key="student-update-success" message="Selected Student
information have been updated successfully." />
<%} %>
<% if(SessionErrors.contains(renderRequest.getPortletSession(),
"student-update-error")){%>
<liferay-ui:error key="student-update-error" message="There is an
Error occurred __while updating student please try again" />
<%} %>
<%
List<Student> studentList=StudentLocalServiceUtil.
getStudents(0,StudentLocalServiceUtil.getStudentsCount());
Student selecteStudentObject=(Student)renderRequest.getAttribute("studentObject");
%>
<form action="<%=getStudentActionURL.toString()%>" name="studentForm" method="POST">
<b>Select Student ID</b><br>
<select name="<portlet:namespace/>studentId"_onchange="submitform(this.value);"_>
<option value="-1">--select--</option>
<%for(Student student:studentList){%>
<option
value="<%=student.getStudentId()%>"<%=selecteStudentObject!=null&&selecteStudentObject.getStudentId()==
student.getStudentId()?"selected":""%>>
<%=student.getStudentId()%></option>
<%} %>
</select><br>
<%if(selecteStudentObject!=null){%>
<b>First Name</b><br/>
<input type="text" name="<portlet:namespace/>firstName"
id="<portlet:namespace/>firstName"
value="<%=selecteStudentObject.getFirstName()%>"/><br/>
<b>Last Name</b><br/>
<input type="text" name="<portlet:namespace/>lastName"
id="<portlet:namespace/>lastName"
value="<%=selecteStudentObject.getLastName()%>"/><br/>
<b>Age</b><br/>
<input type="text" name="<portlet:namespace/>studentAge"
id="<portlet:namespace/>studentAge"
value="<%=selecteStudentObject.getStudentAge()%>"/><br/>
<b>Gender</b><br/>
<input type="radio" name="<portlet:namespace/>sex"
value="1"<%=selecteStudentObject.getStudentGender()==1?"checked":""%>>Male<br>
<input type="radio" name="<portlet:namespace/>sex"
value="0"<%=selecteStudentObject.getStudentGender()==0?"checked":""%>>Female<br/>
<b>Address</b><br/>
<textarea rows="4" cols="50" name="<portlet:namespace/>address">
<%=selecteStudentObject.getStudentAddress()%>
</textarea><br/>
<input type="button" name="updateStudent" id="updateStudent"
value="Update Student" onclick="updateStudentRecord();"/>
<%}%>
</form>
<script>
function submitform(selectedValue)
{
if(selectedValue!="-1"){
document.studentForm.submit();
}
}
function updateStudentRecord()
{
document.studentForm.action="<%=updateStudentActionURL.toString()%>"
document.studentForm.submit();
}
</script>
Delete Student JSP Page (/html/jsps/delete_student.jsp)
<%@page import="com.liferay.portal.kernel.servlet.SessionErrors"%>
<%@page import="com.liferay.portal.kernel.servlet.SessionMessages"%>
<%@page import="com.meera.dbservice.service.StudentLocalServiceUtil"%>
<%@page import="java.util.List"%>
<%@page import="com.meera.dbservice.model.Student"%>
<%@page import="com.liferay.portal.kernel.servlet.SessionErrors"%>
<%@page import="com.liferay.portal.kernel.servlet.SessionMessages"%>
<%@ taglib uri="http://liferay.com/tld/portlet" prefix="liferay-portlet"%>
<%@ taglib uri="http://liferay.com/tld/theme" prefix="liferay-theme" %>
<%@ taglib uri="http://liferay.com/tld/ui" prefix="liferay-ui" %>
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<portlet:defineObjects />
<portlet:renderURL var="homeURL"></portlet:renderURL>
<portlet:actionURL var="deleteStudentActionURL" windowState="normal"
name="deleteStudent">
</portlet:actionURL>
<portlet:actionURL var="getStudentActionURL" windowState="normal"
name="getStudent">
<portlet:param name="cmd" value="DELETE"/>
</portlet:actionURL>
<h2>Delete Student</h2>
<a href="<%=homeURL.toString() %>">Home</a><br/><br/>
<% if(SessionMessages.contains(renderRequest.
getPortletSession(),"student-delete-success")){%>
<liferay-ui:success key="student-delete-success" message="Selected Student
information have been deleted successfully." />
<%} %>
<% if(SessionErrors.contains(renderRequest.getPortletSession(),
"student-delete-error")){%>
<liferay-ui:error key="student-delete-error" message="There is an Error occured
while deleting student please try again" />
<%} %>
<%
List<Student> studentList=StudentLocalServiceUtil.
getStudents(0,StudentLocalServiceUtil.getStudentsCount());
Student selecteStudentObject=(Student)renderRequest.getAttribute("studentObject");
%>
<form action="<%=getStudentActionURL.toString()%>" name="studentForm" method="POST">
<b>Select Student ID</b><br>
<select name="<portlet:namespace/>studentId"_onchange="submitform(this.value);"_>
<option value="-1">--select--</option>
<%for(Student student:studentList){%>
<option
value="<%=student.getStudentId()%>"<%=selecteStudentObject!=null&&selecteStudentObject.getStudentId()==
student.getStudentId()?"selected":""%>>
<%=student.getStudentId()%></option>
<%} %>
</select><br>
<%if(selecteStudentObject!=null){%>
Student Name:
<%=selecteStudentObject.getFirstName()+" "+
selecteStudentObject.getLastName()%>
<br/>
Student Age: <%=selecteStudentObject.getStudentAge() %><br/>
Student Gender:<%=selecteStudentObject.getStudentGender()==1?"Male":"Famale"%>
<br/>
Address: <%=selecteStudentObject.getStudentAddress()%><br/>
<input type="button" name="deleteStudent" id="addStudent" value="Delete
Student" onclick="deleteStudentRecord();"/>
<%}%>
</form>
<script>
function submitform(selectedValue)
{
if(selectedValue!="-1"){
document.studentForm.submit();
}
}
function deleteStudentRecord()
{
document.studentForm.action="<%=deleteStudentActionURL.toString()%>"
document.studentForm.submit();
}
</script>
Display Student JSP Page (/html/jsps/display_student.jsp)
<%@page import="com.liferay.portal.kernel.servlet.SessionErrors"%>
<%@page import="com.liferay.portal.kernel.servlet.SessionMessages"%>
<%@page import="com.meera.dbservice.service.StudentLocalServiceUtil"%>
<%@page import="java.util.List"%>
<%@page import="com.meera.dbservice.model.Student"%>
<%@page import="com.liferay.portal.kernel.servlet.SessionErrors"%>
<%@page import="com.liferay.portal.kernel.servlet.SessionMessages"%>
<%@ taglib uri="http://liferay.com/tld/portlet" prefix="liferay-portlet"%>
<%@ taglib uri="http://liferay.com/tld/theme" prefix="liferay-theme" %>
<%@ taglib uri="http://liferay.com/tld/ui" prefix="liferay-ui" %>
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<portlet:defineObjects />
<portlet:renderURL var="homeURL"></portlet:renderURL>
<portlet:actionURL var="getStudentActionURL" windowState="normal"_name="getStudent"_>
<portlet:param name="cmd" value="VIEW"/>
</portlet:actionURL>
<h2>Display Student Information</h2>
<a href="<%=homeURL.toString() %>">Home</a><br/><br/>
<%
List<Student> studentList=StudentLocalServiceUtil.
getStudents(0,StudentLocalServiceUtil.getStudentsCount());
Student selecteStudentObject=(Student)renderRequest.getAttribute("studentObject");
%>
<form action="<%=getStudentActionURL.toString()%>" name="studentForm" method="POST">
<b>Select Student ID</b><br>
<select name="<portlet:namespace/>studentId"_onchange="submitform(this.value);"_>
<option value="-1">--select--</option>
<%for(Student student:studentList){%>
<option
value="<%=student.getStudentId()%>"<%=selecteStudentObject!=null&&selecteStudentObject.getStudentId()==
student.getStudentId()?"selected":""%>>
<%=student.getStudentId()%></option>
<%} %>
</select><br>
<%if(selecteStudentObject!=null){%>
<h3>The following are the selected Student Information</h3><br/>
Student Name:
<%=selecteStudentObject.getFirstName()+" "
+selecteStudentObject.getLastName()%><br/>
Student Age: <%=selecteStudentObject.getStudentAge() %><br/>
Student Gender:<%=selecteStudentObject.getStudentGender()==1?"Male":"Famale"%><br/>
Address: <%=selecteStudentObject.getStudentAddress()%><br/>
<%}%>
</form>
<script>
function submitform(selectedValue)
{
if(selectedValue!="-1"){
document.studentForm.submit();
}
}
</script>
Related Articles
http://www.liferaysavvy.com/2014/05/liferay-mvc-portlet-form-submission.html
http://www.liferaysavvy.com/2014/05/liferay-mvc-portlet-development-with.html
http://www.liferaysavvy.com/2014/01/liferay-service-builder-many-to-many_3547.html
http://www.liferaysavvy.com/2013/12/sharing-liferay-service-layer-between.html
http://www.liferaysavvy.com/2014/01/liferay-service-builder-tags-details.html
http://www.liferaysavvy.com/2014/01/liferay-service-builder-underlying.html
Author