Java D
Java D

Reputation: 434

how to to retrive data in jsp from MySQL using Liferay?

I want to retrieve data from and insert data in mysql.

I m providing 3 file one java file and two jsp file edit.jsp and view.jsp to edit and view the data respectively.

I have created table using ServiceBuilder, I have put my portal-ext.properties in classes folder, tell me is this the perfect method? m I doing it the correct way?

I want to first insert data and then I want to retrieve data from database.

  1. I m inserting data through the following jsp file - edit.jsp

    <%@ taglib uri="http://java.sun.com/portlet" prefix="portlet" %>
    
    <jsp:useBean class="java.lang.String" id="addNameURL" scope="request" />
    <jsp:useBean class="java.lang.String" id="area" scope="request"/>
    <jsp:useBean class="java.lang.String" id="email" scope="request"/>
    <jsp:useBean class="java.lang.String" id="subject" scope="request"/>
    <jsp:useBean class="java.lang.String" id="compnay" scope="request"/>
    <jsp:useBean class="java.lang.String" id="designation" scope="request"/>
    
    <portlet:defineObjects />
    
    <form id="<portlet:namespace />helloForm" action="<%= addNameURL %>"method="post">
        <table>
            <tr>
                <td>Subject:</td>
                <td><input type="text" name="subject"></td>
            </tr>
            <tr>
                <td>
                Write Your Testimonial
                </td>
                <td><textarea name ="area"></textarea>
                </td>
            </tr>
            <tr>
                <td>Name:</td>
                <td><input type="text" name="username"></td>
            </tr>
            <tr>
                <td>Email:</td>
                <td><input type="text" name="email"></td>
            </tr>
            <tr>
                <td>Company:</td>
                <td><input type="text" name="company"></td>
            </tr>
            <tr>
                <td>Designation:</td>
                <td><input type="text" name="designation"></td>
            </tr>
        </table>
    
        <input type="submit" id="nameButton" title="Submit" value="Submit">
    </form>
    
  2. I have written my insertion logic in following java file - Testimonial1:

    package com.liferay.portlet;
    
    import java.io.IOException;
    import javax.portlet.ActionRequest;
    import javax.portlet.ActionResponse;
    import javax.portlet.GenericPortlet;
    import javax.portlet.PortletException;
    import javax.portlet.PortletMode;
    import javax.portlet.PortletPreferences;
    import javax.portlet.PortletRequestDispatcher;
    import javax.portlet.PortletURL;
    import javax.portlet.RenderRequest;
    import javax.portlet.RenderResponse;
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    import com.liferay.counter.service.CounterLocalServiceUtil;
    import com.liferay.portal.kernel.exception.SystemException;
    import com.liferay.portlet.model.testimonial;
    import com.liferay.portlet.service.testimonialLocalServiceUtil;
    
    public class Testimonial1 extends GenericPortlet {
    
        public void init()throws PortletException 
        {
            editJSP = getInitParameter("edit-jsp");
            viewJSP = getInitParameter("view-jsp");
        }
    
        public void doEdit(RenderRequest renderRequest,RenderResponse renderResponse)
                throws  IOException, PortletException 
        {
            renderResponse.setContentType("text/html");
            PortletURL addNameURL = renderResponse.createActionURL();
            addNameURL.setParameter("addName", "addName");
            renderRequest.setAttribute("addNameURL", addNameURL.toString());
            include(editJSP, renderRequest, renderResponse);
        }
    
        public void doView(RenderRequest renderRequest,RenderResponse renderResponse)throws 
        IOException, PortletException
        {
            PortletPreferences prefs = renderRequest.getPreferences();
            String username = (String) prefs.getValue("name", "");
            String area=(String)prefs.getValue("area", "testimonial");
            String email=(String)prefs.getValue("email", "");
            String subject=(String)prefs.getValue("subject", "");
            String company=(String)prefs.getValue("company", "");
            String designation=(String)prefs.getValue("designation", "");
    
        if (username.equalsIgnoreCase ("")) 
        {
            username = "";
        }
            renderRequest.setAttribute("userName", username);
            renderRequest.setAttribute("area",area);
            renderRequest.setAttribute("email",email);
            renderRequest.setAttribute("subject",subject);
            renderRequest.setAttribute("designation",designation);
            renderRequest.setAttribute("company",company);
    
            include(viewJSP, renderRequest, renderResponse);
        }
    
        public void processAction(ActionRequest actionRequest, ActionResponse actionResponse)
                throws IOException, PortletException 
        {
            String addName = actionRequest.getParameter("addName");
    
            if (addName != null)
            {
                PortletPreferences prefs = actionRequest.getPreferences();
                prefs.setValue("name", actionRequest.getParameter("username"));
                prefs.setValue("area",actionRequest.getParameter("area"));
                prefs.setValue("email",actionRequest.getParameter("email"));
                prefs.setValue("subject",actionRequest.getParameter("subject"));
                prefs.setValue("designation",actionRequest.getParameter("designation"));
                prefs.setValue("company",actionRequest.getParameter("company"));
    
                prefs.store();
    
                testimonial testimonial = null;
    
                try {
                    testimonialLocalServiceUtil.createtestimonial(CounterLocalServiceUtil.increment());
                    testimonial.setSubject(actionRequest.getParameter("subject"));
                    testimonial.setArea(actionRequest.getParameter("area"));
                    testimonial.setUsername(actionRequest.getParameter("username"));
                    testimonial.setEmail(actionRequest.getParameter("email"));
                    testimonial.setCompany(actionRequest.getParameter("company"));
                    testimonial.setDesignation(actionRequest.getParameter("designation"));
                    testimonialLocalServiceUtil.addtestimonial(testimonial);
                } catch (SystemException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
    
                actionResponse.setPortletMode(PortletMode.VIEW);    
            }
        }
    
        protected void include(String path, RenderRequest renderRequest, RenderResponse renderResponse)
                throws IOException, PortletException 
        {
            PortletRequestDispatcher portletRequestDispatcher = getPortletContext().getRequestDispatcher(path);
    
            if (portletRequestDispatcher == null) 
            {
                _log.error(path + " is not a valid include");
            }
            else
            {
                portletRequestDispatcher.include(renderRequest, renderResponse);
            }
        }
        protected String editJSP;
        protected String viewJSP;
        private static Log _log = LogFactory.getLog(Testimonial1.class);
    }
    
  3. I have written my view logic in following file - view.jsp and I want to retrive data from database in following file:

    <%@ taglib uri="http://java.sun.com/portlet" prefix="portlet" %>
    
    <jsp:useBean id="subject" class="java.lang.String" scope="request"/>
    <jsp:useBean id="area" class="java.lang.String" scope="request"/>
    <jsp:useBean id="userName" class="java.lang.String" scope="request" />
    <jsp:useBean id="email" class="java.lang.String" scope="request"/>
    <jsp:useBean id="company" class="java.lang.String" scope="request"/>
    <jsp:useBean id="designation" class="java.lang.String" scope="request"/>
    <portlet:defineObjects />
    
    <p>This is the Testimonial portlet......... how are u all ..........</p>
    
    <p>Subject is ....<%=subject %></p>
    <p>Testimonial is .....<%=area %></p>
    <p>Hello <%= userName %>!</p>
    <p>your Email ......<%=email %></p>
    <p>your company .....<%=company %></p>
    <p>You are .......<%=designation %></p>
    
  4. My service.xml file

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE service-builder PUBLIC "-//Liferay//DTD Service Builder 6.1.0//EN"  "http://www.liferay.com/dtd/liferay-service-builder_6_1_0.dtd">
    
    <service-builder package-path="com.liferay.portlet">
        <author>ubuntu</author>
        <namespace>perception</namespace>
    
        <entity name="testimonial" local-service="true" remote-service="true">
            <column name="subject" type="String"></column>
            <column name="area" type="String"></column>
            <column name="username" type="String"></column>
            <column name="email" type="String"></column>
            <column name="company" type="String"></column>
            <column name="designation" type="String"></column>
        </entity>
    </service-builder>
    
  5. My portal-ext.properties file:

    #
    # MySQL 
    #
    
    jdbc.default.driverClassName=com.mysql.jdbc.Driver 
    jdbc.default.url=jdbc:mysql://localhost/lportal?useUnicode=true&characterEn
    coding=UTF-8&useFastDateParsing=false
    jdbc.default.username=root
    jdbc.default.password=ubuntu123
    
    schema.run.enabled=true
    schema.run.minimal=true
    

I have put all my files, now please tell me what I have to do for data insertion and retrieval.

Pls tell am I right in insertion code? and how to retrive data from database?

Upvotes: 0

Views: 4075

Answers (2)

Olaf Kock
Olaf Kock

Reputation: 48077

This is rather a comment, but too long for that format - thus I'm adding it as an answer.

As far as I can see there's a major flaw with your code, not related to the underlying question: You're using the portlet VIEW mode to show the data and the EDIT mode to manipulate it. This is a common misunderstanding of JSR-286, and I learned to hate this naming.

EDIT is meant to configure the current portlet - when the result of an EDIT operation is a change in a single database record, you almost always have used the wrong portlet mode. You'll have to use the VIEW mode (this is just the portlet mode, nothing to do with your application, reading or writing data). Consider that the EDIT mode by default is only accessible to administrators and typically being used to change PortletPreferences, rarely database content (this is a simplification, but a good rule of thumb)

For this reason, Liferay names the EDIT mode "Preferences" on the UI and you typically navigate to it through the portlet's context menu ("Preferences", sic!)

Upvotes: 1

rkosegi
rkosegi

Reputation: 14678

You may take a look at liferay's service builder.

If your data is not in same database as liferay, you can still use service builder as well

Upvotes: 1

Related Questions