Crud and Search opration in Liferay:
-> Liferay use service builder techniq for Crud opration.
-> Service builder purform by Service.xml file.
-> Service.xml file create table in database and also create class and diffrent method.
1) Create service.xml file.
->Create service.xml file in WEB-INF and write below code.
->CODE:
<service-builder package-path="com.test">
<namespace>qr</namespace>
<entity name="Searchclass" local-service="true"
remote- service="false">
<column name="id" type="long" primary="true"/>
<column name="itemname" type="String" />
<finder name="Itemname" return-type="Collection">
<finder-column name="itemname" />
</finder>
</entity>
</service-builder>
#1Java package for code
#2 Namespace for tables
#3 Name of entity
#4 Primary key
#5 Additional fields
#6 Finder methods
->Then after build service using cmd:
ant build-service
->Then after compile process use cmd:
ant compile
-> Then deploy project:
ant deploy
-> In eclips use ant tool and click build-service tag.
->Then after refresh project and click compile tag.
->Once again refresh project and deploy .
->When ant build-service run after that refresh project then see new folder and some new java file is created.
->Files and folder are define below image:
->In above two image define two folder firsst one has service and second one has src which has com/test/model , com/test/service folder . This all are created by ant build-service command.
-> com/test/model/service/impl has file SearchclassLocalServiceImpm.java in which we create
any method and use as service builder class method.
-> Create method and ant build-service,ant compile and refresh project. After that see created method in file WEB-INF/service/com/test/service/SearchclassLocalserviceUtil.java use for requiered purpos.
-> Use <finder> in service.xml and ant build-service,ant compile,the finder maethod is genrated in /WEB-INF/service/com/test/service/persistence/SearchclassPersistence.java .
2) How to add data in table:
2.1)create .jsp page which display UI tag.
->Write code below :
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<%@ taglib uri="http://alloy.liferay.com/tld/aui" prefix="aui" %>
<%@ taglib uri="http://liferay.com/tld/ui" prefix="liferay-ui"%>
<portlet:defineObjects />
<portlet:actionURL name="Add" var="add" />
<aui:form name="a" action="<%=add.toString() %>" method="post" >
<aui:input type="text" label="Name" name="nm" value="" />
<aui:button type="submit" value="Save" />
</aui:form>
2.2) Make code for insert in /docroot/WEB-INF/src/com/test/NewPortlet.java
->Write below code :
package com.test;
import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import com.liferay.counter.service.CounterLocalServiceUtil;
import com.liferay.util.bridges.mvc.MVCPortlet;
import com.test.model.Searchclass;
import com.test.model.impl.SearchclassImpl;
import com.test.service.SearchclassLocalServiceUtil;
public class NewPortlet extends MVCPortlet {
public void Add(ActionRequest ar , ActionResponse aq) throws Exception
{
String str=ar.getParameter("nm");
//Auto increament primary key.
long l= CounterLocalServiceUtil.increment(Searchclass.class.getName());
// Service.xml create class which instance declare usinf *Imlp()
Searchclass ins=new SearchclassImpl();
ins.setId(l);
ins.setItemname(str);
// Add entry in table
SearchclassLocalServiceUtil.addSearchclass(ins);
}
}
->In above code has “Add” method which is define in <portlet:actionURL name="Add" var="add" /> in .jsp page.
-> <portlet:actionURL> find “Add” method in Action file and execute it.
3) Update,delete and Display Entry
-> Use Search container for Display data and also use Delete and Update
data.
-> Search container code for Display data and Button for delete and update.
-> Write Code in Jsp Page:
Code:
<liferay-ui:search-container delta="5" emptyResultsMessage="no-users-were-found">
<liferay-ui:search-container-results>
<%
List<Searchclass> tempResults = SearchclassLocalServiceUtil.getSearchclasses(0,SearchclassLocalServiceUtil.getSearchclassesCount());
results = ListUtil.subList(tempResults, searchContainer.getStart(), searchContainer.getEnd());
total = tempResults.size();
pageContext.setAttribute("results", results);
pageContext.setAttribute("total", total);
%>
</liferay-ui:search-container-results>
<liferay-ui:search-container-row className="com.test.model.Searchclass" keyProperty="id" modelVar="item">
//This tag dispaly table data
<liferay-ui:search-container-column-text name="itemname" value="<%=item.getItemname() %>"/>
//This tag display Buttton Which is assign Jsp page.
<liferay-ui:search-container-column-jsp path="/html/newportlet/button.jsp" align="right"/>
</liferay-ui:search-container-row>
<liferay-ui:search-iterator />
</liferay-ui:search-container>
->For button in search container, first create jsp page for button and also
Create method for button event like update,delete otherwise it genrate
Error. Let see code below.
->For button create jsp page which assing in service builder
<liferay-ui:search-container-column-jsp path="/html/newportlet/button.jsp" align="right"/>
->button.jsp page code:
<%
ResultRow rslt=(ResultRow)request.getAttribute(WebKeys.SEARCH_CONTAINER_RESULT_ROW);
Searchclass img=(Searchclass)rslt.getObject();
String prk=String.valueOf(img.getPrimaryKey());
%>
//Button menu tag
<liferay-ui:icon-menu>
//Create “editProduct” method in Action file for Redirect update form page
<portlet:actionURL name="editProduct" var="editURL">
<portlet:param name="key" value="<%=prk%>" />
</portlet:actionURL>
// ”EDIT” button for Update event.
<liferay-ui:icon image="edit" message="Edit" url="<%=editURL.toString() %>" />
// Create “deleteProduct” method in Action file for DELETE
<portlet:actionURL name="deleteProduct" var="deleteURL">
<portlet:param name="key" value="<%= prk %>" />
</portlet:actionURL>
//”DELETE” Button for DELETE Event
<liferay-ui:icon-delete url="<%=deleteURL.toString() %>" />
</liferay-ui:icon-menu>
->After this create method in Action file which define in code.
1> editProduct
2> deleteProduct
->Code for Event:
3.1>For Update code:
public void editProduct(ActionRequest ar,ActionResponse ap) throws Exception
{
String str= ar.getParameter("key");
long l=Long.valueOf(str);
//Retriev table data using Primary key
Searchclass a=SearchclassLocalServiceUtil.getSearchclass(l);
//Set Attribute which has all values of specified pk.
ar.setAttribute("edit",a );
// Redirect to Jsp page which has Update form.
ap.setRenderParameter("jspPage","/html/newportlet/edit.jsp");
}
-> Now Create Jsp page which is Update form.Here is edit.jsp Page
-> code fro edit.jsp page:
//get attribute for update which is fetch in Action file above.1
<jsp:useBean id="edit" type="com.test.model.Searchclass" scope="request" />
//Create “updateProductURL” method for Update.
//”updateProductURL” is custmize method name.give any name.
<portlet:actionURL name="updateProductURL" var="updateProductURL"/>
<aui:form action="<%=updateProductURL.toString() %>" method="post">
<aui:input name= "key" value="<%=edit.getPrimaryKey() %>" type="hidden" />
<aui:input name="nm" label="name" value="<%=edit.getItemname() %>" size="45" />
<aui:button type="submit" value="Save"/>
</aui:form>
-> “updateProductURL” method in Action File
public void updateProductURL(ActionRequest ar,ActionResponse ap)throws Exception
{
String str=ar.getParameter("nm");
String str1=ar.getParameter("key");
long l=Long.valueOf(str1);
//Fetch data from table using pk
Searchclass itm=SearchclassLocalServiceUtil.getSearchclass(l);
//set update data
itm.setItemname(str);
// Update method with change data
SearchclassLocalServiceUtil.updateSearchclass(itm);
//Redirect to Search container with update entry
ap.setRenderParameter("jspPage","/html/newportlet/view.jsp");
}
3.2>Delete code:
->Once create button for delete in jsp page then after create delete method
in Action file.
->”deleteProduct” is method which is define in jsp page
<portlet:ActionUrl var=” ” name=” deleteProduct”>
->Code is below.
public void deleteProduct(ActionRequest ar,ActionResponse ap) throws Exception
{
String str= ar.getParameter("key");
long l=Long.valueOf(str);
SearchclassLocalServiceUtil.deleteSearchclass(l);
ap.setRenderParameter("jspPage","/html/newportlet/view.jsp");
}
4)Search data.
->We can search data with all column entry Like Primary key,Name,item so on.
->In this example use itenname for searching data.
->First define finder in service.xml
->code :
<finder name="Itemname" return-type="Collection">
<finder-column name="itemname" />
</finder>
->Write This code in above </entity>
1) <finder name="Itemname" return-type="Collection">
->name="Itemname" :-> is Finder method name which is genrated by
ant sercive-build and ant compile time.
->Method called by persistence interface and called “Itemname” by “findbyItemname”
->return-type="Collection" :-> It is return List.
2)<finder-column name="itemname" />
->It is define column name which use for search data by this column entry
->Now to make jsp page to display search form.
1) Jsp page search.
Code:
// Assing ”search” method which is create in Action file
<portlet:actionURL var="asd" name ="search" />
// Search form
<aui:form name="b" action="<%=asd.toString() %>" method="post" >
<aui:input type="text" label="Name" name="nm" value="" />
<aui:button type="submit" value="Search" />
</aui:form>
2)In Action file
->Create method which name is “search”
->Code :
public void search(ActionRequest req,ActionResponse res) throws Exception
{
String str = req.getParameter("nm");
//Set attributes for search result
req.setAttribute("nma",str);
//Redirect search container to display result
res.setRenderParameter("jspPage","/html/newportlet/view.jsp");
}
->This code only redirect to search result jsp page with required attributes.
->Now we use *Impl.java file and also *persistence interface.
->In *Impl.java create custom method and use *persistence interface in method for search data.
-> Action file called customize method which is created in *Impl.java
and *Impl method called finder method by *persistence interface.
->Below code specified it. We display result in search container.
1)Create search container in jsp page
->Code:
<liferay-ui:search-container delta="5" emptyResultsMessage="no-users-were-found" >
<liferay-ui:search-container-results
//Call *impl customize method usin *LocalServiceUtil class
// Method name is “searchbyuser”
results="<%= SearchclassLocalServiceUtil.searchbyuser(str) %>"
//size of result
total="<%= SearchclassLocalServiceUtil.searchbyuser(str).size()%>"
/>
//Create Instance of service builder class
<liferay-ui:search-container-row className="com.test.model.Searchclass" keyProperty="id" modelVar="itename">
//Display Result
<liferay-ui:search-container-column-text name="itemname" value="<%=itemname.getItemname() %>"/>
</liferay-ui:search-container-row>
<liferay-ui:search-iterator />
</liferay-ui:search-container>
-> Now let see how *Impl class work.
1) Create method in *Impl.java file .
-> Code :
public List<Searchclass> searchbyuser(String name) throws SystemException,PortalException
{
// searchPersistence.findByItemname(name) method created by <finder> tag write in servicr.xml file.
//Return search result in List<>
List<Searchclass> a= searchclassPersistence.findByItemname(name);
return a;
}
->After that ant build-service and ant compile.
->This method is use by *LocalerviceUtil class.
Nice Article, Could you please attach the code?
ReplyDeleteThanks
send email with your details on akaram3u@gmail.com
ReplyDeletenice articel of service builder, could you send the code.
ReplyDeletethnks.
send me your email with details on akaram3u@gmail.com
Deletesend email with your details on akaram3u@gmail.com
ReplyDeleteI want this code.
ReplyDeleteMy email id : pradip.bhatt@aspiresoftware.in
Really very nice step by step tutorial..
ReplyDeleteThankssssssss
I want this code
ReplyDeletecan you send me please
my email is : boua_foryou@hotmail.fr
This comment has been removed by the author.
ReplyDeleteCould you please send me the code,
ReplyDeletemy email id is: pradeepraj0405@gmail.com
Thanks Akaram.It was really helpful.
ReplyDeleteplese send me code : pradip.bhatt@aspiresoftware.in
ReplyDeleteThis comment has been removed by the author.
ReplyDeleteThank you Akram,
ReplyDeletePlease could you email source code : bhimannah@gmail.com
Thank you very much Akram!
ReplyDeletePlease send your source code to my email : vtquan243@gmail.com !
Hey Akram, I need your source code. Please send your source code to niken_tangguh@yahoo.com
ReplyDeleteThanks!
nice tutorial. please send me the code at deepakpandit7@gmail.com
ReplyDeleteThanks
Hi Akram, nice steps wrt service builder. I need the source code. Please send to my mailid: ashokbs151@gmail.com.
ReplyDeleteThanks,
Ashok
Nice article
ReplyDeleteHi Akram Can you send me code on tusharpatel88@gmail.com. Please?-
Hiii Akram,
ReplyDeleteReally nice Article.
It describes all steps very clearly.
can you please send me code on "kdajmera@gmail.com"
Hi Akram,
ReplyDeleteNice article, it helped me lot.. could you please send the source code to my id : shashikumar.m7@gmail.com
Great article, Thanks a million. Could you please send me a copy of the source code also. richardbruins.mv@gmail.com
ReplyDeleteI looked for a working code for ages! thanks! can you send me a copy to kalkidan.chekol85@gmail.com please?
ReplyDeleteHello Akram,
ReplyDeleteNice article. Can you please send me the source code to my email id :: prajnapshetty.92@gmail.com.
Hello Akram,
ReplyDeleteNice article. Can you please send me the source code to my email id :: kuruvara@gmail.com.
can you plz send me the source code to my email id : poojakumarip09@gmail.com
ReplyDelete