Wednesday, May 14, 2014

Liferay MVC Portlet Development with Liferay IDE

Introduction:

Liferay MVC is portlet development framework given by Liferay. We will use Liferay MVC framework to develop JSR 168&286 standards portlet and deploy into liferay portal. This frame work is liferay specific one and we can use in liferay portal.

Liferay IDE is eclipse Plugin and it as tool to develop liferay portlets by using different portlet frame work.

Liferay IDE has support for multiple portlet frameworks one of the frame work is Liferay MVC.

We will use Liferay IDE to develop Liferay MVC portlets.

Environment:

Liferay IDE 2.x+Eclipse (Kepler) +Liferay Plugins SDK 6.2+Tomcat 7.x Liferay Portal Bundle

Prerequisites



Note:

Follow above two articles before start this article.

Liferay IDE have different version like 1.x and 2.x we may expect some changes form version to version don’t worry almost same at the time of portlet development.

Once we done all steps in above article then we are ready with Liferay Development Environment with Liferay IDE.

Now we have to choose Liferay Prospective in the Eclipse.

The following is Liferay Prospective in Eclipse



Creating Liferay MVC Portlet with Liferay IDE

Step: 1

In the eclipse click on create new liferay project option in eclipse.

The following is screen show create new liferay project


Step: 2

In the Project Dialog we need provide project name, Display Name, Build Type, Plugins SDK and Server Environment.

Now select Plugin Type is Portlet and click on check box i.e. Include sample code and check the box i.e. Launch New Portlet Wizard after project is created, once we have done all click on Next

Follow the below screen



Note:

We have different built types and please select ANT type which is default one.

If you have multiple server environments then select your environment

If you have multiple Plugin SDKs then select your Plugins SDK.

Plugin type we have options like portlet, theme, layout, ext, web, hook and service builder portlet.

We are developing simple portlet so choose portlet Plugin type in select box.

We need check the check box Launch New Portlet Wizard after project is created so that we will get another widow after created the portlet and there we can give our custom portlet class name.

From Liferay IDE 2.x onwards Project Dialog window have many option at the time of portlet creation and this is different from older version of IDE.

Step: 3

Once we click on next in above step then we will get another dialog window here we need to select portlet development frame work.

We already know we are using Liferay MVC frame work. Now we need click on radio button Liferay MVC then click on finish.



Note:

As soon as you click on finish it will create Liferay MVC portlet and it will add all configuration files and it will create directory structure it will take few seconds to create all.

Step: 4

Once project is created you will get another Dialog Window there we need give the Custom Portlet Class Name and our class is extends the MVC Portlet class, finally click on next button.

Follow the screen below.



Note:

Select radio button Create New Portlet so that it will create portlet with our custom portlet class and it will be extended the MVCPortlet class.

Need to provide our Portlet class, Java Packages and Super class it’s MVCPortlet

Step: 5

Once we click on next in above step we will get another dialog there we have to provide some more information so that portlet will be created accordingly.


Once portlet is created you can see Portlet Project in Package Explored i.e. in left side of Eclipse IDE and Portlet related ANT build file i.e. you can see in ANT view which is right side of eclipse.

The following screen shows you Project and it ANT file



While Project creation as I said it will create all required portlet configuration files and its configurations as for the data we provided at time of project creation. It will also create the directory structured for the project.

Each Portlet project has its own ANT build file i.e. build.xml file and this build file have different targets to deploy the portlet into liferay portal.

The following is screen shows Project Directory Structure and ANT build Targets.


Note:

At time of project creation it will create one default portlet after that we have another dialog window there we have created new portlet and there we provided our custom class name, so totally we can see two portlets.

Here we can ignore default portlet or you can remove default portlet configuration form portlet.xml, liferay-portlet.xml and liferay-display.xml files.

When we use Liferay IDE 2.x we can see above scenario.

Portlet Deployment:

When we create portlet project then each project has ANT build file i.e. build.xml file, it has ant targets to deploy the portlets in liferay portal servers.

In the eclipse if we see in ANT view right side, you can see portlet project build file. If you e open tree view then you can see all available ANT targets for the portlet project.



In the available targets one should be default one that is you can see different color in the ANT view.

We will use ant deploy target to deploy the portlet in liferay portal server.

Simply double click on deploy target in the eclipse ANT view so that portlet will be deployed into liferay portal server that is tomcat or Jboss

When we run deploy target all log message you can see in eclipse console view.


If no compile time error then it will show build success message otherwise it show compiles time errors in the console.

If build success then it will be packages as war file and deployed into liferay deploy directory.

As soon as war file places in liferay deploy directory auto deploy scanner will copy the portlet into server deployment directory and it will be extracted in deployment directory then portlet available in the application so that we use it.

Start Liferay portal Server

Before you deploy the portlet your liferay portal server should be start mode.
We can also start server from eclipse that is configures servers in servers views you can simple click on start option then server will be start.




Once we successfully deployed portlet and start the server then portlet available to add in page.

Using Portlet:

Access Liferay portal using you host name port

http://localhost:8080

Generally when create portlet then it will be available in sample category default. We already know at time of creation we will provide the category we can find there.

Login as liferay admin in liferay portal in the application section you can see the sample category.

The following is login screen




Add portlet to page



Added portlet to page




Now if we want developed code or modify/add jsps we can do it for project and need to deploy again so that changes will be applied portlet.

Important Points
  • When we create project from eclipse it will create all basic configuration files and required directory structure for the portlet project.
  • Configuration files are like portlet.xml, liferay-portlet.xml, liferay-disply.xml file and web.xml and all these are available in WEB-INF directory.
  • Portlet class is available in src directory we can modify.
  • Jsp pages are available in the path we specified in project creation so that we can add new jsp pages or we can modify existed jsp pages that are default jsp page.
  • As we already know portlet class should extends MVC Portlet class so that we can call it as Liferay MVC Portlet
  • When we run ant deploy target first all java classes will be compiled and packages as war file then placed in liferay deploy directory.
  • As soon as it will be placed in deploy directory then auto deploy scanner will add additional configurations to the portlet and placed into server deployment directory then portlet available

More Details about Liferay MVC Portlet Please go through following Articles


Note:

MVC Portlet is default portlet in liferay and we will have many choices portlet, JSF, Struts Portlet or Spring Portlet

Portlet Anatomy/Directory structure

The following is portlet directory structure



In Main Project parent directory we have docroot and build.xml file available.

Build.xml file for build the liferay portlet and it is any file so that we can deploy the portlet.
In Liferay all files and directories will be places in docroot

In side docroot we have WEB-INF and this will contains all xml files, classes and lib directory and also src directory for java classes.

Jsp pages will be available in direct docroot.

 docroot is directory just for development conveniences after packaged as war file docroot will be excluded.

You can add more code samples which I have given in previous articles and you can download from my source forge location.

Download Liferay MVC Portlet Examples


Employee Liferay MVC Portlet Code samples

Web.xml


<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.5"
 xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
</web-app>


Portlet.xml


<?xml version="1.0"?>
<portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd
http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd" version="2.0">
       <portlet>
              <portlet-name>Employee Liferay Mvc</portlet-name>
              <display-name>Employee Liferay Mvc</display-name>
              <portlet-class>
                     com.meera.liferaymvc.EmployeeLiferayMVC
              </portlet-class>
              <init-param>
                     <name>view-template</name>
                     <value>/html/jsps/view.jsp</value>
              </init-param>
              <expiration-cache>0</expiration-cache>
              <supports>
                     <mime-type>text/html</mime-type>
                     <portlet-mode>view</portlet-mode>
              </supports>
              <portlet-info>
                     <title>Employee Liferay Mvc</title>
                     <short-title>Employee Liferay Mvc</short-title>
                     <keywords></keywords>
              </portlet-info>
              <security-role-ref>
                     <role-name>administrator</role-name>
              </security-role-ref>
              <security-role-ref>
                     <role-name>guest</role-name>
              </security-role-ref>
              <security-role-ref>
                     <role-name>power-user</role-name>
              </security-role-ref>
              <security-role-ref>
                     <role-name>user</role-name>
              </security-role-ref>
       </portlet>
</portlet-app>


Liferay-portlet.xml


<?xml version="1.0"?>
<!DOCTYPE liferay-portlet-app
PUBLIC "-//Liferay//DTD Portlet Application 6.2.0//EN"
"http://www.liferay.com/dtd/liferay-portlet-app_6_2_0.dtd">
<liferay-portlet-app>
       <portlet>
              <portlet-name>Employee Liferay Mvc</portlet-name>
              <icon>/icon.png</icon>
              <header-portlet-css>/css/main.css</header-portlet-css>
              <footer-portlet-javascript>
                     /js/main.js
              </footer-portlet-javascript>
              <css-class-wrapper>
                     employee liferay mvc-portlet
              </css-class-wrapper>
       </portlet>
       <role-mapper>
              <role-name>administrator</role-name>
              <role-link>Administrator</role-link>
       </role-mapper>
       <role-mapper>
              <role-name>guest</role-name>
              <role-link>Guest</role-link>
       </role-mapper>
       <role-mapper>
              <role-name>power-user</role-name>
              <role-link>Power User</role-link>
       </role-mapper>
       <role-mapper>
              <role-name>user</role-name>
              <role-link>User</role-link>
       </role-mapper>
</liferay-portlet-app>


Liferay-display.xml


<?xml version="1.0"?>
<!DOCTYPE display PUBLIC "-//Liferay//DTD Display 6.2.0//EN"
 "http://www.liferay.com/dtd/liferay-display_6_2_0.dtd">
<display>
       <category name="category.sample">
              <portlet id="Employee Liferay Mvc"></portlet>
       </category>
</display>


Portlet Action Class (EmployeeLiferayMVC.java)


package com.meera.liferaymvc;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.PortletException;
import com.liferay.portal.kernel.util.ParamUtil;
import com.liferay.util.bridges.mvc.MVCPortlet;
public class EmployeeLiferayMVC extends MVCPortlet {
       public void addEmployee(ActionRequest actionRequest,
                     ActionResponse actionResponse) throws IOException, PortletException {
String employeeName = ParamUtil.getString(actionRequest, "employeeName");
              String employeeAddress = ParamUtil.getString(actionRequest,
                           "employeeAddress");
              Map<String, String> employeeMap = new HashMap<String, String>();
              employeeMap.put("employeeName", employeeName);
              employeeMap.put("employeeAddress", employeeAddress);
              actionRequest.setAttribute("employeeMap", employeeMap);
              actionResponse.setRenderParameter("mvcPath","/html/jsps/displayEmployee.jsp");
       }

}


Default portlet view page i.e. view.jsp (/html/jsps/view.jsp)


<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<portlet:defineObjects />
<portlet:renderURL  var="addEmployee" windowState="normal">
<portlet:param name="mvcPath" value="/html/jsps/addEmployee.jsp"/>
</portlet:renderURL>
<h1>Welcome to Liferay MVC Employee Portlet</h1>
<a href="<%=addEmployee.toString()%>">Add Employee</a><br/>


Add employee jsp page (/html/jsps/addEmployee.jsp)


<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<portlet:defineObjects />
<portlet:actionURL var="addEmployeeActionURL" windowState="normal" name="addEmployee">
</portlet:actionURL>
<h1> Add Employee</h1>
<form action="<%=addEmployeeActionURL%>" name="emplyeeForm"  method="POST">
Employee Name<br/>
<input  type="text" name="<portlet:namespace/>employeeName" id="<portlet:namespace/>employeeName"/><br/>
Employee Address<br/>
<input type="text" name="<portlet:namespace/>employeeAddress" id="<portlet:namespace/>employeeName"/><br/>
<input type="submit" name="addEmployee" id="addEmployee" value="Add Employee"/>
</form>



Display employee jsp page (/html/jsps/displayEmployees.jsp)


<%@page import="java.util.Map"%>
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<portlet:defineObjects />
<h1>Display Employee Details</h1>
<%
Map<String,String> employeeMap=(Map<String,String>)renderRequest.getAttribute("employeeMap");
if(employeeMap!=null){
%>
Emplyee Name: <%=employeeMap.get("employeeName")%>     <br/>
Emplyee Address: <%=employeeMap.get("employeeAddress")%><b/>
<%}%>


The following are portlet application screens

 Portlet screen


Add employee screen


Display Employee Details Screen


Create Liferay Portlet Project form existing source with Liferay IDE

Before we have seen creating New Portlet Project with Liferay IDE and Eclipse now we will see create liferay portlet from existing source.

Generally we can download many portlet examples from different places we want use it in our development we need create project from existed source code.

Step: 1

We need place the downloaded portlet or source portlet in Liferay Plugins SDK portlets directory.


Example:

D:\Liferay Work Space\liferay-plugins-sdk-6.2.0\portlets


Step: 2

Now open project directory and delete all environment related configuration files like .classpath, .project, .settings.

These files are related to previous developed environment configuration so we don’t need these files so simply delete.


Step: 3

Go to eclipse and click on create Liferay project there we need select create new liferay project from existing source code option.




Step: 4

Now browse project location which in Liferay Plugins SDK portlets directory.



Once we select the project then click on finish button then portlet project will be created from existing source code and that will be visible in package explorer right side.

Step: 5

Now we need to add ant build file to ANT vies so that we can run ant commands.
Simply open project in package explorer and find ant build file then drag and drop build.xml in ANT view that is in right side



Now we can run ant targets by simply double click on targets in ANT view.

If you have any environmental Challenges go through following link



Author

169 comments:

  1. I would like to thank you for the efforts you had made for writing this awesome article. trig idetities

    ReplyDelete
  2. We cater to all levels of site development from small business sites to large e-commerce websites. web development company in usa

    ReplyDelete
  3. I'm impressed, I must say. Very rarely do I come across a blog thats both informative and entertaining, and let me tell you, you ve hit the nail on the head. Your blog is important.. Wye Strainer

    ReplyDelete
  4. The post is written in very a good manner and it contains many useful information for me. SEO Agency Vancouver

    ReplyDelete
  5. Your article has piqued plenty of sure assimilation. i'm able to see why past you've got ended this kind of to your liking activity of creating it attractive. Best Ways to Build Relationships with Colleagues

    ReplyDelete
  6. You completed a few fine points there. I did a search on the subject and found nearly all persons will go along with with your blog. Vancouver SEO Agency

    ReplyDelete
  7. Leader in developing embedded system projects, providing Engineering and SCADA solutions using Raspberry pi, Arduino and more.... network topology

    ReplyDelete
  8. in case you got down to make me suppose nowadays; mission skillful! I absolutely once your writing fashion and the way you influence your ideas. thanks. All-on-4

    ReplyDelete
  9. This kind of booklet always inspiring and i select to go online mood content material, for that excuse glad to find great region to many here in the proclaim, the writing is just on your liking, thank you for the name. Daftar Poker Indonesia

    ReplyDelete
  10. Wow, cool publicize. identity in imitation of to jot down with this too taking technology and genuine difficult sham to create a earsplitting article however I put matters off too much and never seem to accumulate started. thank you although. That Time I Got Reincarnated As A Slime Shion

    ReplyDelete
  11. I've proper selected to build a blog, which I hold been deficient to do for a during. Acknowledges for this inform, it's really serviceable! CBD For Anxiety

    ReplyDelete
  12. I am impressed. I don't think Ive met anyone who knows as much about this subject as you do. You are truly well informed and very intelligent. You wrote something that people could understand and made the subject intriguing for everyone. Really, great blog you have got here. Chauffeur To Heathrow

    ReplyDelete
  13. I definitely enjoying every little bit of it. It is a great website and nice share. I want to thank you. Good job! You guys do a great blog, and have some great contents. Keep up the good work. innovation valais

    ReplyDelete
  14. Your article has piqued plenty of sure assimilation. i'm able to see why past you've got ended this kind of to your liking activity of creating it attractive. Best wishes..

    ReplyDelete
  15. I'm glad I found this web site, I couldn't find any knowledge on this matter prior to.Also operate a site and if you are ever interested in doing some visitor writing for me if possible feel free to let me know, im always look for people to check out my web site. Best Airport Taxi Service

    ReplyDelete
  16. Wow, What a Excellent post. I really found this to much informatics. It is what i was searching for.I would like to suggest you that please keep sharing such type of info.Thanks internet marketing company

    ReplyDelete
  17. This will open a window containing the HTML source code of the page. Inspect an HTML Element: Right-click on an element basic HTML CODE

    ReplyDelete
  18. i might following to thanks for the efforts you've got made in writing this newsletter. i am hoping the thesame fine take amusement doings from you inside the thinking of as adroitly. thank you... Lambingan

    ReplyDelete
  19. Your content material is not anything instantaneous of aching in lots of ways. I suppose this is enticing and eye-begin fabric. thanks correctly an awful lot for worrying roughly your content material and your readers. Pinoy Lambingan

    ReplyDelete
  20. that is each unmarried one enticing content! i have adequately loved reading your factors and have agree the conclusion that you are right about lots of them. you're big. 먹튀검증 안전놀이터 스포츠중계 꽁머니 먹튀검증 토토사이트 안전놀이터 꽁머니

    ReplyDelete
  21. Some short term investors have lost a good bit of money. money gain plan website

    ReplyDelete
  22. You make so many great points here that I read your article a couple of times. Your views are in accordance with my own for the most part. This is great content for your readers. backlinks

    ReplyDelete
  23. Your article has piqued plenty of sure assimilation. i'm able to see why past you've got ended this kind of to your liking activity of creating it attractive. เกมส์ สล็อต ออนไลน์

    ReplyDelete
  24. I am a new user of this site so here i saw multiple articles and posts posted by this site,I curious more interest in some of them hope you will give more information on this topics in your next articles. Albert Einstein

    ReplyDelete
  25. This is a wonderful article, Given so much info in it, These type of articles keeps the users interest in the website, and keep on sharing more ... good luck. Albert Einstein

    ReplyDelete
  26. Awesome blog. I enjoyed reading your articles. This is truly a great read for me. I have bookmarked it and I am looking forward to reading new articles. Keep up the good work! high risk credit card processing

    ReplyDelete
  27. Its as if you had a great grasp on the subject matter, but you forgot to include your readers. download notpad++

    ReplyDelete
  28. Really nice and interesting post. I was looking for this kind of information and enjoyed reading this one. Keep posting. Thanks for sharing. dumps shop

    ReplyDelete
  29. I really enjoy simply reading all of your weblogs. Simply wanted to inform you that you have people like me who appreciate your work. Definitely a great post. Hats off to you! The information that you have provided is very helpful. custom lapel pins

    ReplyDelete
  30. Great job for publishing such a beneficial web site. Your web log isn’t only useful but it is additionally really creative too. Poker Online

    ReplyDelete
  31. This is my first time visit to your blog and I am very interested in the articles that you serve. Provide enough knowledge for me. Thank you for sharing useful and don't forget, keep sharing useful info: PDF method cpa

    ReplyDelete
  32. I recently found many useful information in your website especially this blog page. Among the lots of comments on your articles. Thanks for sharing. cosmetic packaging

    ReplyDelete
  33. This particular papers fabulous, and My spouse and i enjoy each of the perform that you have placed into this. I’m sure that you will be making a really useful place. I has been additionally pleased. Good perform! custom boxes wholesale

    ReplyDelete
  34. Interesting post. I Have Been wondering about this issue, so thanks for posting. Pretty cool post.It 's really very nice and Useful post.Thanks Acupressure Points for

    ReplyDelete
  35. Much obliged for each other useful site. The spot else might just I understand that sort of data written in such a perfect means?
    I have an endeavor that I"m a few seconds ago working on, and I have been watchful for such data. 주소용


    ReplyDelete
  36. This is my first time i visit here. I found such a substantial number of interesting stuff in your blog especially its examination. Really its inconceivable article. Keep it up. آدرس جدید سایت تتل بت

    ReplyDelete
  37. It improves the presumptive worth of your property: There is positively no uncertainty that such carports add moment check appeal to your home. The aesthetic examples and plans not just enhance your home, it likewise makes a feeling of one of a kind character to your home outside that separate it from the remainder of the homes in the area. Lion's share of home purchasers search for specific degree of uniqueness, and customized engraved solid plans on your garage will add that attractive draw, in this way expanding your Return on Investment without spending excessively.concrete driveways dublin

    ReplyDelete
  38. The post is written in very a good manner and it contains many useful information for me. news

    ReplyDelete
  39. It is a very informative post thanks for sharing the information.
    Candle packaging Connecticut
    Candy box packaging

    ReplyDelete
  40. Incredible points. Sound arguments. Keep up the good spirit.

    ReplyDelete
  41. I love this blog!! I found diversified extent of HVAC maintenance parts ranging from actuators, bearing, belts,Aaon Bushings Pulleys, Aaon Sensors, Aaon Spark Electrodes and much more here..

    ReplyDelete
  42. We're developing a structure for holding heavy products. Such a variety of packaging boxes are consumed for shipping in accordance with the stipulation provided. Custom CBD capsule boxes The functions of double-walled boxes manufacture front surprise resellers, helping them to achieve the desired packaging in color printing or without printing at all. Are you looking for an effective packaging solution that not only packs your product, but adds value to your brand? There is no better option than a custom packaging solution, printed with quality ink. Improve your brand recognition with well-defined signature packaging.

    ReplyDelete
  43. Remarkable article, it is particularly useful! I quietly began in this, and I'm becoming more acquainted with it better! Delights, keep doing more and extra impressive Seo cork

    ReplyDelete
  44. I am jovial you take pride in what you write. It makes you stand way out from many other writers that can not push high-quality content like you Web design Dublin

    ReplyDelete
  45. As mailer boxes don't need a much space and protection during delivery. So it's easy to make the more customer engaging their customization is very important through design support. Order premium quality of boxes at wholesale prices.

    ReplyDelete
  46. The important thing to remember about Instagram stories is they're not everlasting. The images and videos remain on your feed for only 24 hours, then disappear. have a peek here

    ReplyDelete
  47. Hello I am so delighted I located your blog, I really located you by mistake, while I was watching on google for something else, Anyways I am here now and could just like to say thank for a tremendous post and a all round entertaining website. Please do keep up the great work. SEO Company in Pakistan

    ReplyDelete
  48. This site contains a lot of really good information. Lots of useful inaformation. I'll add it to my bookmarks and stop by often. Maybe other visitors will think the same way as me. 토토

    ReplyDelete
  49. I'll add it to my bookmarks and stop by often. Maybe other visitors will think the same way as me. 파워볼

    ReplyDelete
  50. This site contains a lot of really good information. Lots of useful inaformation. I'll add it to my bookmarks and stop by often. Maybe other visitors will think the same way as me. I hope you have a nice day today. 놀이터

    ReplyDelete
  51. This site contains a lot of really good information. Lots of useful inaformation. I'll add it to my bookmarks and stop by often. nba중계

    ReplyDelete
  52. This site contains a lot of really good information. Lots of useful inaformation. 온라인카지노

    ReplyDelete
  53. Thanks, Your articles really help us. Visit my blog 메이저놀이터

    ReplyDelete
  54. This comment has been removed by the author.

    ReplyDelete
  55. contact us at the attribution on and you will be contacted to agree on the cost of spraying
    먹튀검증

    ReplyDelete
  56. Good website! I truly love how it is easy on my eyes it is. I am wondering how I might be notified whenever a new post has been made. I have subscribed to your RSS which may do the trick? Have a great day! we buy your house for cash

    ReplyDelete
  57. Thanks for your personal marvelous posting! I quite enjoyed reading it, you will be a great author. I will always bookmark your blog and will come back down the road. I want to encourage one to continue your great posts, have a nice morning! สมัครยูฟ่าเบท

    ReplyDelete
  58. The next time I read a blog, I hope that it doesnt disappoint me as much as this one. I mean, I know it was my choice to read, but I actually thought you have something interesting to say. All I hear is a bunch of whining about something that you could fix if you werent too busy looking for attention. 婚姻介紹所邊間好

    ReplyDelete
  59. The custom-made boxes and the non-custom boxes are different from each other in thousands of aspects. Their every characteristic is different from each other. Get More Information Custom Boxes

    ReplyDelete
  60. you are doing a really good job. I really thankful for this.
    Biotech always appreciate and support this type of article.

    ReplyDelete
  61. I'm very Glad to visit your informational Post.Candle Boxes Bulk Packaging boxes are really necessary for any kind of product. If you want to pack your products in a stylish way then use these Candle Boxes Bulk with customized designs, styles, colors, shapes, and stocks. We are also offering error-free design and free shipping services all over the USA.

    ReplyDelete
  62. Such a Great Post! I have read your blog such a great information. I really like your article. Gives a lot of information to the readers. keep it up and share more Information.
    collage photo frames online

    ReplyDelete
  63. I am very glad to visit your informational post. I hope you will keep on sharing such kind of useful information on a regular basis. We provide quality-oriented Custom Pillow Boxes
    Custom Printed Pillow Boxes
    With flawless printing techniques.

    ReplyDelete
  64. Great survey, I'm sure you're getting a great response. Window Repair Company

    ReplyDelete
  65. Islandwide Food Delivery in Singapore
    When you are looking through the different food delivery service options out there, you will quickly find that not all of them are a quality choice. While many locations will deliver you high quality food in a timely manner, others will let things sit and then deliver your food when it is convenient for them. With this in mind, you will want to consider some important things as you look for a reliable food delivery service.

    ReplyDelete
  66. Positive site, where did u come up with the information on this posting?I have read a few of the articles on your website now, and I really like your style. Thanks a million and please keep up the effective work. weather

    ReplyDelete
  67. I am sure this article has touched all the internet viewers, its really really
    pleasant piece of writing on building up new website. 부산오피


    ReplyDelete
  68. i feel that this article is really useful slotxo

    ReplyDelete
  69. They're produced by the very best degree developers who will be distinguished for your polo dress creating. You'll find polo Ron Lauren inside exclusive array which include particular classes for men, women. https://onohosting.com/

    ReplyDelete
  70. With so many books and articles coming up to give gateway to make-money-online field and confusing reader even more on the actual way of earning money, https://onohosting.com/

    ReplyDelete
  71. Took me time to read all the comments, but I really enjoyed the article. It proved to be Very helpful to me and I am sure to all the commenters here! It’s always nice when you can not only be informed, but also entertained! What are the best vegan gummies for sale?

    ReplyDelete
  72. I found so many interesting stuff in your blog especially its discussion. Really its great article. Keep it up. Managed IT Services Madison

    ReplyDelete
  73. That appears to be excellent however i am still not too sure that I like it. At any rate will look far more into it and decide personally! nursing test bank

    ReplyDelete

  74. Slotxo, play online slots, easy to play,
    get real money, lots of promotions

    ReplyDelete
  75. Endnu engang dejlig service, smilende personale og ikke mindst er maden i top og til fornuftig pris. Spiste butter lamb og butter chicken og dertil en dejlig mango lassi.

    Bindia.dk

    ReplyDelete
  76. Moreover, these display boxes for products will include colors to match the targeted gender or customboxesbulk specific age group.

    ReplyDelete
  77. Vi havde heldigvis bestilt bord, da dette sted Indisk Restaurant København er meget velbesøgt.Betjeningen var god.Maden var noget Indian restaurant mere krydret, end jeg husker det fra mit besøg i Indien, men ellers smagte det fint.Vi startede med at dele en snack-tallerken, hvor især rejerne var meget lækre.

    ReplyDelete
  78. We as packagingxpert provide the best packaging designs for gift boxes, food packaging, Cosmetic packaging, and other packaging solutions.If you need Custom software boxes and other boxes contact us 

    ReplyDelete
  79. A great content material as well as great layout. Your website deserves all of the positive feedback it’s been getting. I will be back soon for further quality contents. 토토커뮤니티

    ReplyDelete


  80. Energy pyhamids, otherwise known as trophic level diagrams, are used to question-hub represent the flow of energy through an ecosystem. An organisms trophic...

    ReplyDelete
  81. Get custom window boxes wholesale at affordable prices with many design options from PackHit. We offer free shipping and free design support on all orders.

    ReplyDelete

  82. Our areas of expertise includes subjects like Mathematics, Statistics, Physics, Engineering, Chemistry, Biology, English, Computer Science, Management, Accounting, and Economics. REQUEST EASY HOMEWORK HELP Our website is configured to be user-friendly so that you can easily submit your assignment requirements and get fast and free price quotations.tutorsonspot

    ReplyDelete
  83. https://www.pupapersbook.com/2020/04/jruby-rails-web-application-development.html?showComment=1646317281207#c8259186253930925394

    ReplyDelete
  84. เกมสล็อตออนไลน์ เกมออนไลน์เล่นง่ายได้เงินจริง การลงทุนรูปแบบใหม่ยุค 4.0 เล่นสล็อตออนไลน์ได้ง่ายๆ ที่เว็บ ambbet เว็บสล็อตออนไลน์ที่ใหญ่ที่สุด มีเกมสล็อตให้เลือกเล่นมากที่สุด ambbets.com เว็บหลัก รวมเกมสล็อตออนไลน์ เกมลิขสิทธิ์เเท้ 100% เล่นง่าย จ่ายเต็ม ถอนได้ไม่อั้น ไม่ต้องทำยอด ไม่มีค่าทำเนียม บริการฟรี 24 ชั่วโมง.

    ReplyDelete
  85. This comment has been removed by the author.

    ReplyDelete
  86. Good Information. Keep it up! Boxo Packaging provides elegant packaging boxes that feature your company's logo. We provide high-quality printing services in addition to printing your company's logo on the boxes and taking into mind the product's dimensions.

    ReplyDelete
  87. your blog is very informative. Thanks for sharing.Custom Box Manufacturer

    ReplyDelete
  88. Awesome Information!!! Thanks to Admin for sharing this. I visited many pages of your website. Really your Blog is Awesome. Keep Sharing such good Stories. Thanks. Visit Here: Turquoise jewelry

    ReplyDelete
  89. Czy wiesz, jakie produkty warto jeść podczas odchudzania? Artykuł "Jakie Produkty Wspomagają Odchudzanie?" to must-read dla wszystkich, którzy chcą schudnąć. Sprawdź już dziś! tutaj zobacz

    ReplyDelete
  90. Potrzebujesz porad dotyczących przeprowadzki w trakcie remontu w Warszawie? Wejdź w link i przeczytaj artykuł! tutaj wejdź

    ReplyDelete
  91. Jeśli szukasz profesjonalnych specjalistów, koniecznie sprawdź artykuł o "Wykończenie pod klucz w Warszawie i ich cena wykonania" - tutaj kliknij .

    ReplyDelete
  92. Szukasz inspiracji na nowy wystrój swojego mieszkania w stolicy? wejdź - tam znajdziesz wiele ciekawych rozwiązań.

    ReplyDelete
  93. Zaskocz wszystkich nowym wyglądem swojego mieszkania. Zapoznaj się z artykułem o remontach pod klucz - porady kliknij tu , które pomogą Ci stworzyć oryginalne wnętrze!

    ReplyDelete
  94. Remonty w Warszawie - jakie zezwolenia trzeba uzyskać przed rozpoczęciem prac? zobacz

    ReplyDelete
  95. Potrzebujesz wskazówek dotyczących malowania klatki schodowej? Ten artykuł jest dla Ciebie. zobacz

    ReplyDelete
  96. Jeśli masz wątpliwości, jak wykończyć swoje mieszkanie pod klucz w Warszawie, odwiedź nasz artykuł o wykończeniu mieszkania pod klucz. Kliknij w klik !

    ReplyDelete
  97. Czy wiesz, że kupując mieszkanie pod klucz w Warszawie, zyskujesz gotowe do zamieszkania lokum od razu? Sprawdź artykuł o tym temacie i przekonaj się sam! zobacz tu

    ReplyDelete
  98. Czy wiesz, że "wykończenie mieszkania pod klucz z meblami Warszawa" to rozwiązanie, które dopasowuje się do Twoich indywidualnych potrzeb? Sprawdź artykuł i dowiedz się więcej. Wejdź w link. klik tutaj

    ReplyDelete
  99. Przeczytaj nasz artykuł o "Drobnych remontach w Warszawie" i poznaj przepis na dom pełen harmonii. kliknij

    ReplyDelete
  100. Chcesz wiedzieć, jakie trendy remontowe królują w Warszawie? Zajrzyj do artykułu o "Drobnych remontach w Warszawie"! tutaj zobacz

    ReplyDelete
  101. Czy wiesz, jakie produkty warto jeść podczas odchudzania? Artykuł "Jakie Produkty Wspomagają Odchudzanie?" to must-read dla wszystkich, którzy chcą schudnąć. Sprawdź już dziś! https://io17.pl/7451

    ReplyDelete
  102. Marzysz o pięknie wykończonym mieszkaniu w Warszawie? Ten artykuł pokaże Ci, jak to zrobić! kliknij tutaj

    ReplyDelete
  103. Sprawdź, jakie są obowiązujące przepisy dotyczące remontów w Warszawie. https://www.io17.pl/380

    ReplyDelete
  104. Zastanawiasz się, jakie prawa i obowiązki masz jako właściciel mieszkania podczas remontu? Wejdź na artykuł o "Wykończenie mieszkania pod klucz w Warszawie od specjalisty" i zdobądź odpowiednie informacje! - wejdź

    ReplyDelete
  105. Warto przeczytać ten artykuł o wyborze podłogi do przedpokoju w bloku zobacz . Pełen praktycznych porad!

    ReplyDelete
  106. Jeśli chcesz dowiedzieć się, ile zapłacisz za wykończenie mieszkania w przyszłym roku, zapraszamy do naszego artykułu https://io17.pl/5805 !

    ReplyDelete
  107. "Zastanawiasz się, która firma remontowa jest najlepsza w Warszawie? Sprawdź artykuł o "Zweryfikuj firmę z usługami remontowymi w Warszawie" i poznaj ranking najbardziej wiarygodnych usługodawców! kliknij tu "

    ReplyDelete
  108. Jeśli planujesz położyć nową podłogę winylową, warto zajrzeć do tego artykułu. kliknij

    ReplyDelete
  109. Jeśli chcesz dowiedzieć się, jakie dodatki pasują do szarego pokoju, koniecznie sięgnij po ten artykuł! url

    ReplyDelete
  110. Dlaczego trudzić się samodzielnie, skoro możesz skorzystać z "Kompleksowych wykończeń wnętrz" w Warszawie? Sprawdź nasz artykuł! http://io17.pl/7541

    ReplyDelete
  111. Jeśli zastanawiasz się, jakie dokumenty i przygotowania będą potrzebne do zakupu mieszkania, artykuł o "Zakup mieszkania - jak się za to zabrać" jest dla Ciebie. tutaj sprawdź

    ReplyDelete
  112. Chcesz poznać średnie powierzchnie mieszkań na jednego mieszkańca w poszczególnych regionach Europy? Kliknij w link! klik

    ReplyDelete
  113. Planujesz termomodernizację poddasza? Sprawdź nasz artykuł o "Płyta OSB na poddasze jaka grubość" i dowiedz się więcej! kliknij

    ReplyDelete
  114. Artykuł o układaniu płytek 60 60 na podłodze to skarbnica wiedzy dla wszystkich, którzy chcą zrobić to samodzielnie. wejdź tu

    ReplyDelete
  115. Chcesz poznać strategie negocjacyjne przy kupnie mieszkań? Przeczytaj ten artykuł! kliknij tu

    ReplyDelete
  116. Znudziły Ci się remonty prowadzone na własną rękę? Przeczytaj artykuł o usługach "Remont pod klucz Warszawa" i poznaj nowe możliwości! - wejdź tutaj

    ReplyDelete
  117. Nie wiesz, jakie prace remontowe muszą być wykonane? Artykuł o "Remoncie pod klucz Warszawa i wygoda" pomoże Ci zrozumieć, jak wiele aspektów trzeba uwzględnić przy kompleksowym remoncie! https://puuf.pl/717

    ReplyDelete
  118. tutaj zobacz Zobacz, jakie są najczęstsze błędy podczas układania paneli w pokoju!

    ReplyDelete
  119. Chcesz, aby Twój remont był zgodny z zasadami feng shui? Ten artykuł o "Jak przygotować się do generalnego remontu?" pomoże Ci urządzić harmonijne wnętrze. kliknij

    ReplyDelete
  120. Chcesz poznać korzyści zdrowotne surowej diety? Zapraszamy do lektury artykułu! sprawdź tu

    ReplyDelete
  121. Zastanawiasz się, co to za dieta? Przeczytaj więcej w artykule o surowej diecie! https://www.io17.pl/7553

    ReplyDelete
  122. Owoce i warzywa to klucze do zdrowego życia - zobacz, jakie łaski kryje dieta RAW - wejdź w artykuł! - tutaj wejdź

    ReplyDelete
  123. Czy zastanawiałeś się kiedyś, jak to jest zamówić wykończenie mieszkania pod klucz? Ten artykuł o Warszawie odpowie na Twoje pytania! tutaj wejdź

    ReplyDelete
  124. Zamówienie wykończenia mieszkania pod klucz wydaje się skomplikowane? Przekonaj się, że to proste, czytając artykuł o Warszawie http://io17.pl/374 .

    ReplyDelete
  125. Odkryj niezwykłe projekty aranżacji wnętrz w artykule o "Wykończenie mieszkania pod klucz w Warszawie inspiracje" - sprawdź i wejdź zaprasza do lektury!

    ReplyDelete
  126. Planujesz remont? Przeczytaj artykuł o "Wykończeniach wnętrz Warszawa i Remontach", aby znaleźć przydatne porady i wskazówki. http://io17.pl/623

    ReplyDelete
  127. Marzysz o nowoczesnym wnętrzu? Zobacz, jakie są najmodniejsze trendy w wykończeniach wnętrz w Warszawie. - https://io17.pl/521

    ReplyDelete
  128. Sprawdź, dlaczego sucha nawierzchnia jest kluczowa dla udanego remontu. sprawdź tutaj

    ReplyDelete
  129. Marzysz o przytulnym, ale nowoczesnym domu? Sprawdź nasz artykuł o stylu rustykalnym nowoczesnym. wejdź tutaj

    ReplyDelete
  130. Odkryj miejsce, które inspiruje do twórczych rozwiązań w aranżacji wnętrz! sprawdź tu

    ReplyDelete
  131. Chciałbyś poznać tajniki składania własnego m4? Ten artykuł jest dla Ciebie! Sprawdź go już teraz! https://www.io17.pl/5618

    ReplyDelete
  132. Zobacz, jak ważne jest wykończenie mieszkania w Warszawie, aby cieszyć się pięknym widokiem za oknem. kliknij

    ReplyDelete
  133. Chcesz mieć oryginalne i funkcjonalne wnętrza? Artykuł o architektach wnętrz jest dla Ciebie. Sprawdź! kliknij tu

    ReplyDelete
  134. Poszukujesz inspiracji do wykończenia swojego mieszkania w Warszawie? Ten artykuł zawiera przydatne wskazówki i porady, które pomogą Ci stworzyć idealne wnętrze! wejdź i sprawdź

    ReplyDelete
  135. Planujesz remont, ale nie wiesz jakie sumy mogą się kryć za wykończeniem mieszkania? Koniecznie sprawdź nasz artykuł, który pomoże Ci lepiej zrozumieć budżet remontowy. klik tutaj

    ReplyDelete
  136. Ciekawi Cię, ile dokładnie będziesz musiał wydać na wykończenie domu? Wejdź w ten kliknij tu i przeczytaj artykuł, który przyniesie Ci pełne zrozumienie.

    ReplyDelete
  137. Watch your favorite Pinoy TV Serials online in hd. Pinoy Lambingan is free Source of Streaming Pinoy Dramas.
    Pinoy Lambingan

    ReplyDelete
  138. IsraFace - новости израиля, это еврейская социальная сеть, где встречаются евреи и еврейки и русский еврей из . Выкладывайте личные фотки, видео, объединяйтесь в группы, заходите в блог, посещайте форум, заводите еврейские знакомства.

    ReplyDelete