Liferay MVC Portlet Database Interactions / Liferay MVC CRUD Operations

Liferay MVC Portlet Database Interactions / Liferay MVC CRUD Operations

 
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 from  Liferay Savvyprevious articles.
 
 
 
 
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
 
  1. Legacy JDBC Code
  2. Liferay Service Builder

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
 
 
The following are the steps to Generate Service Layer in Portlet.
 
  1. Create simple Liferay MVC portlet using Liferay IDE in eclipse
  2. Create Service.xml file in Portlet WEB-INF directory
  3. Define required entities/tables in service.xml
  4. Run the Service builder
  5. Using Generated Database services In Portlet Development

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
 
 
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 on build-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/libdirectory.
 
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 builder namespace_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.
 
  1. Add /Create record
  2. Delete Record
  3. Update Record
  4. Show Data/Record

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
 
  • Service Builder is tool to generate database interaction layer to the portlet.
  • Service Builder is simple ANT script and it has target to run the tool.
  • Service Builder ANT target is available in portlet build.xml file by default so we can run target to generate service layer for portlet.
  • Service Builder need service.xml file so that it will use those configuration to generate services.
  • Service.xml file consist of set of predefined tags and it will be available in Service Builder DTD file.
  • Service builder use the Spring Hibernate DAO implementation concept to generate services.
  • Service Builder tool generate all java interfaces, implementation classes and spring hibernate configuration files, apart from these it will also generated required SQL scripts.
  • SQL script will be run at time of portlet deployment it’s generally created table scripts and indexes scripts.
  • For each modification in service.xml file or any other changes in service layer related classes we need to re run the service builder.
  • ant build-service is target to run service builder.
  • Service Builder packages all interfaces and required Util classes as porletName-portlet.jar file.
  • Services jar file will be used in other portlet to obtain other portlet services. This is called sharing of services in other portlet.

Note:
 
There are many things behind Liferay Service Builder we will see more details in coming articles.
 
Download Portlet
 
 
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()+"&nbsp;"+
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()+"&nbsp;"
+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
 
 
 
 
 
 
 
Author
Blogs
Hi prince, I would like to add some images in my comment because i want to share some screenshots related to steps in the blog.
Hi prince, I would like to add some images in my comment because i want to share some screenshots related to steps in the blog.
Hi prince, I would like to add some images in my comment because i want to share some screenshots related to steps in the blog.
Hi prince, I would like to add some images in my comment because i want to share some screenshots related to steps in the blog.