|
XXXLocalServiceUtil
XXXServiceUtil
XXXUtil
XXX is your entity name in service.xml file example say Student is your entity name.
StudentLocalServiceUtil
StudentServiceUtil
StidentUtil
|
Same page you can access after login as Admin then no exception will be thrown.
|
Principle Exception
|
|
<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" />
<!-- Finder methods -->
< finder name="Gender" return-type="Collection">
< finder-column name="studentGender"/>
</ finder >
</entity>
|
|
public returnType findByXXX (finderColumns){
}
XXX is the name we specified in finder tag as name attribute.
|
|
public List findBy Gender(int stdentGender){
}
|
|
<finder name= "byGender" return-type= "Collection">
<finder-column name= "studentGender"/>
</finder>
|
|
Select * from LS_Student Where studentgender=?
|
|
public class StudentUtil {
public static java.util.List<com.meera.dbservice.model.Student>
findBybyGender(
int studentGender)
throws com.liferay.portal.kernel.exception.SystemException {
return getPersistence().findBybyGender(studentGender);
}
}
|
|
<finder name= "fistName" return-type= "Student">
<finder-column name= "firstName"/>
</finder>
|
|
Select * from LS_Student Where firstName=?
|
|
<finder name= "Gender_Age" return-type= "Collection">
<finder-column name= "studentGender"/>
<finder-column name= "studentAge"/>
</finder>
|
|
Select * from LS_Student Where studentGender=? AND StudentAge=?
|
|
public class StudentUtil{
public static java.util.List<com.meera.dbservice.model.Student>
findByGender_Age( int studentGender, int studentAge)
throws com.liferay.portal.kernel.exception.SystemException {
return getPersistence().findByGender_Age(studentGender,
studentAge);
}
}
|
|
java.util.List<com.meera.dbservice.model.Student> studentsList=
StudentUtil. findByGender_Age(1,20)
|
|
org.hibernate.HibernateException: No Hibernate Session bound to thread
|
- Implement Custom method in XXXLocalServiceImpl class
- Run service Builder
- Call Implemented method using XXXLocalServiceUtil
|
XXXLocalServiceImpl
StudentLocalServiceImpl
|
|
public java.util.List<com.meera.dbservice.model.Student>
findByGenderAndAge( int studentGender, int studentAge)
throws com.liferay.portal.kernel.exception.SystemException {
return StudentUtil.findByGender_Age(studentGender, studentAge);
}
|
|
public class StudentUtil{
public static java.util.List<com.meera.dbservice.model.Student>
findByGender_Age(
int studentGender, int studentAge)
throws com.liferay.portal.kernel.exception.SystemException {
return getPersistence().findByGender_Age(studentGender,
studentAge);
}
}
|
|
public class StudentLocalServiceImpl extends
StudentLocalServiceBaseImpl {
public java.util.List<com.meera.dbservice.model.Student>
findByGenderAndAge(
int studentGender, int studentAge)
throws com.liferay.portal.kernel.exception.SystemException {
return StudentUtil. findByGender_Age(studentGender, studentAge);
}
}
|
|
public static java.util.List<com.meera.dbservice.model.Student>
findByGenderAndAge(
int studentGender, int studentAge)
throws com.liferay.portal.kernel.exception.SystemException {
return getService().findByGenderAndAge(studentGender, studentAge);
}
|
|
java.util.List<Student> studentsList=
StudentLocalServiceUtil. findByGenderAndAge(1,20)
|
- Whenever we need to implement custom method then we will use XXXLocalServiceimpl class
- We can’t call XXXUtil and XXXServiceUtil methods directly so we need to use XXXLocalServiceImpl class to implement custom methods.
- All finder methods will be created in XXXUtil
- When we call XXXServiceUtil methods as Guest then we will get Principle Exception.
- When we call XXXUtil methods directly then we will get Hibernate Exception says No Hibernate Session bound to thread
- For every custom method implementation in XXXLocalServiceImpl then the respective method signature will be created in XXXLocalServiceUtil and this is happened after run the service builder.
- We always use XXXLocalServiceUtil to interact with database and some time we will use XXXServiceUtil too.
|
public class StudentLocalServiceImpl extends
StudentLocalServiceBaseImpl {
public java.util.List<com.meera.dbservice.model.Student>
findByGenderAndAge(
int studentGender, int studentAge)
throws com.liferay.portal.kernel.exception.SystemException {
return StudentUtil. findByGender_Age(studentGender, studentAge);
}
}
|
|
public class StudentLocalServiceUtil {
public static java.util.List<com.meera.dbservice.model.Student>
findByGenderAndAge(
int studentGender, int studentAge)
throws com.liferay.portal.kernel.exception.SystemException {
return getService().findByGenderAndAge(studentGender,
studentAge);
}
}
|
|
<%@page import= "com.liferay.portal.kernel.util.ListUtil"%>
<%@page import= "com.meera.dbservice.model.Student"%>
<%@page import= "java.util.List"%>
<%@page import= "com.meera.dbservice.service.StudentLocalServiceUtil"%>
<%@ include file= "init.jsp"%>
<a href= "<portlet:renderURL /> ">«Home</a>
<div class= "separator"></div>
<liferay-portlet:renderURL varImpl= "getStudentsByAgeAndGender">
<portlet:param name= "mvcPath"
value= "/html/jsps/get_students_by_gender_age.jsp" />
</liferay-portlet:renderURL>
<liferay-portlet:renderURL varImpl= "iteratorURL">
<portlet:param name= "studentAge"
value= "<%= String.valueOf(studentAge) %> " />
<portlet:param name= "studentGender"
value= "<%= String.valueOf(studentGender) %> " />
<portlet:param name= "mvcPath"
value= "/html/jsps/get_students_by_gender_age.jsp" />
</liferay-portlet:renderURL>
<h2>Search Students</h2><br/>
<form action= "<%=getStudentsByAgeAndGender%> "
name= "studentForm" method= "POST">
<b>Age</b><br/>
<input type= "text" name= "<portlet:namespace/> studentAge" id= "<portlet:namespace/> studentAge"
value= "<%=String.valueOf(studentAge)%> "/><br/>
<b>Gender</b><br/>
<input type= "radio" name= "<portlet:namespace/> studentGender" value= "1"<%=studentGender==1?"checked":""%>>Male<br>
<input type= "radio" name= "<portlet:namespace/> studentGender" value= "0"<%=studentGender==0?"checked":""%>>Female<br/>
<input type= "submit" name= "addStudent" id= "addStudent" value= "Search"/>
</form>
<liferay-ui:search-container
displayTerms= "<%= new DisplayTerms(renderRequest) %> "
emptyResultsMessage= "there-are-no-students"
headerNames= "firstName,studentAge,studentGender"
iteratorURL= "<%= iteratorURL %> "
delta= "5"
>
<liferay-ui:search-container-results>
<%
List<Student> studentList=
StudentLocalServiceUtil.findByGenderAndAge(studentGender, studentAge);
searchContainer.setTotal(studentList.size());
studentList = ListUtil.subList(studentList,searchContainer.getStart(),
searchContainer.getEnd());
searchContainer.setResults(studentList);
%>
</liferay-ui:search-container-results>
<liferay-ui:search-container-row
className= "Student"
keyProperty= "studentId"
modelVar= "currentStudent">
<liferay-portlet:renderURL varImpl= "rowURL">
<portlet:param name= "backURL" value= "<%= currentURL %> " />
<portlet:param name= "mvcPath" value= "/html/jsps/display_student.jsp" />
<portlet:param name= "studentId" value= "<%=String.valueOf(currentStudent.getStudentId()) %> " />
</liferay-portlet:renderURL>
<liferay-ui:search-container-column-text
href= "<%= rowURL %> "
name= "firstName"
property= "firstName"
/>
<liferay-ui:search-container-column-text
href= "<%= rowURL %> "
name= "studentAge"
property= "studentAge"
/>
<liferay-ui:search-container-column-text
href= "<%= rowURL %> "
name= "studentGender"
value= '<%=currentStudent.getStudentGender()==1?"Male":"Female"%> '
/>
</liferay-ui:search-container-row>
<liferay-ui:search-iterator searchContainer= "<%=searchContainer %> " />
</liferay-ui:search-container>
|


