{"id":39526,"date":"2016-07-27T11:00:44","date_gmt":"2016-07-27T08:00:44","guid":{"rendered":"http:\/\/examples.javacodegeeks.com\/?p=39526"},"modified":"2019-04-09T12:57:58","modified_gmt":"2019-04-09T09:57:58","slug":"vaadin-best-practices","status":"publish","type":"post","link":"https:\/\/examples.javacodegeeks.com\/java-development\/enterprise-java\/vaadin\/vaadin-best-practices\/","title":{"rendered":"Vaadin Best Practices"},"content":{"rendered":"<p>Best practices are procedures that are accepted or prescribed as being correct or most effective.<br \/>\n&nbsp;<br \/>\n&nbsp;<br \/>\n&nbsp;<br \/>\n&nbsp;<br \/>\n&nbsp;<br \/>\n&nbsp;<br \/>\n&nbsp;<br \/>\n&nbsp;<br \/>\n&nbsp;\n<\/p>\n<div class=\"toc\">\n<h3>Table Of Contents<\/h3>\n<dl>\n<dt><a href=\"#toc100\">1. The tools<\/a><\/dt>\n<dt><a href=\"#toc200\">2. Introduction<\/a><\/dt>\n<dt><a href=\"#toc300\">3. Prerequisites<\/a><\/dt>\n<dt><a href=\"#toc400\">4. Set up the project<\/a><\/dt>\n<dt><a href=\"#toc500\">5. Coding the example<\/a><\/dt>\n<dd>\n<dl>\n<dt><a href=\"#toc510\">5.1 Make a design<\/a><\/dt>\n<dt><a href=\"#toc520\">5.2 Annotations<\/a><\/dt>\n<dt><a href=\"#toc530\">5.3 Navigator<\/a><\/dt>\n<dd>\n<dl>\n<dt><a href=\"#toc531\">5.3.1 Layout &amp; content<\/a><\/dt>\n<dt><a href=\"#toc532\">5.3.2 Navigator views<\/a><\/dt>\n<dt><a href=\"#toc533\">5.3.3 Menu listeners<\/a><\/dt>\n<dt><a href=\"#toc534\">5.3.4 Menu<\/a><\/dt>\n<dt><a href=\"#toc535\">5.3.5 Navigator initial page<\/a><\/dt>\n<dt><a href=\"#toc536\">5.3.6 Welcome page<\/a><\/dt>\n<\/dl>\n<\/dd>\n<dt><a href=\"#toc540\">5.4 Validate user input<\/a><\/dt>\n<dd>\n<dl>\n<dt><a href=\"#toc541\">5.4.1 Input form<\/a><\/dt>\n<dt><a href=\"#toc542\">5.4.2 Name field validator<\/a><\/dt>\n<dt><a href=\"#toc543\">5.4.3 Surname field validator<\/a><\/dt>\n<dt><a href=\"#toc544\">5.4.4 Age field validator<\/a><\/dt>\n<dt><a href=\"#toc545\">5.4.5 Age field validator<\/a><\/dt>\n<dt><a href=\"#toc546\">5.4.6 Validation process<\/a><\/dt>\n<dt><a href=\"#toc547\">5.4.7 Clear fields<\/a><\/dt>\n<\/dl>\n<\/dd>\n<dt><a href=\"#toc550\">5.5 Use containers in fields<\/a><\/dt>\n<dd>\n<dl>\n<dt><a href=\"#toc551\">5.5.1 Property sets<\/a><\/dt>\n<dt><a href=\"#toc552\">5.5.2 Field groups<\/a><\/dt>\n<\/dl>\n<\/dd>\n<dt><a href=\"#toc560\">5.6 Separate the UI from the data<\/a><\/dt>\n<dt><a href=\"#toc570\">5.7 Deploy on https<\/a><\/dt>\n<\/dl>\n<\/dd>\n<dt><a href=\"#toc600\">6. The complete source code<\/a><\/dt>\n<dd>\n<dl>\n<dt><a href=\"#toc610\">6.1 VaadinbestpracticesUI.java<\/a><\/dt>\n<dt><a href=\"#toc620\">6.2 WelcomePage.java<\/a><\/dt>\n<dt><a href=\"#toc630\">6.3 InputPage.java<\/a><\/dt>\n<dt><a href=\"#toc640\">6.4 DataPage.java<\/a><\/dt>\n<dt><a href=\"#toc640\">6.5 DataBean.java<\/a><\/dt>\n<\/dl>\n<\/dd>\n<dt><a href=\"#toc700\">7. Running the example<\/a><\/dt>\n<dt><a href=\"#toc800\">8. Results<\/a><\/dt>\n<dd>\n<dl>\n<dt><a href=\"#toc810\">8.1 Welcome view<\/a><\/dt>\n<dt><a href=\"#toc820\">8.2 Input view<\/a><\/dt>\n<dt><a href=\"#toc830\">8.3 Input view<\/a><\/dt>\n<\/dl>\n<\/dd>\n<dt><a href=\"#toc900\">9. Download the Source Code<\/a><\/dt>\n<\/dl>\n<\/div>\n<h2><a name=\"toc100\"><\/a>1. The tools<\/h2>\n<ul>\n<li>Java JDK 8<\/li>\n<li>Latest Eclipse Mars<\/li>\n<li>Vaadin 7.6.8<\/li>\n<li>Tomcat Server 8<\/li>\n<\/ul>\n<h2><a name=\"toc200\"><\/a>2. Introduction<\/h2>\n<p>In this example we are going to illustrate best practices used to make Vaadin applications.&nbsp;We are going to make a Vaadin example to illustrate these practices.<\/p>\n<h2><a name=\"toc300\"><\/a>3. Prerequisites<\/h2>\n<ul>\n<li>JDK installed<\/li>\n<li>Eclipse Mars installed and working<\/li>\n<li>Vaadin plug-in installed<\/li>\n<li>Tomcat 8 installed and running<\/li>\n<\/ul>\n<h2><a name=\"toc400\"><\/a>4. Set up the project<\/h2>\n<p>In the file menu choose File -&gt; New -&gt; Other<\/p>\n<p><figure id=\"attachment_34378\" aria-describedby=\"caption-attachment-34378\" style=\"width: 646px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2016\/02\/01-New-Project-1.png\" rel=\"attachment wp-att-34378\"><img decoding=\"async\" class=\"size-full wp-image-34378\" src=\"http:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2016\/02\/01-New-Project-1.png\" alt=\"01 New Project\" width=\"646\" height=\"422\" srcset=\"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2016\/02\/01-New-Project-1.png 646w, https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2016\/02\/01-New-Project-1-300x196.png 300w\" sizes=\"(max-width: 646px) 100vw, 646px\" \/><\/a><figcaption id=\"caption-attachment-34378\" class=\"wp-caption-text\">1 New Project<\/figcaption><\/figure><\/p>\n<p>Now from the list choose Vaadin 7 project<\/p>\n<p><figure id=\"attachment_34379\" aria-describedby=\"caption-attachment-34379\" style=\"width: 524px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2016\/02\/02-Vaadin-Project-1.png\" rel=\"attachment wp-att-34379\"><img decoding=\"async\" class=\"size-full wp-image-34379\" src=\"http:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2016\/02\/02-Vaadin-Project-1.png\" alt=\"02 Vaadin Project\" width=\"524\" height=\"499\" srcset=\"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2016\/02\/02-Vaadin-Project-1.png 524w, https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2016\/02\/02-Vaadin-Project-1-300x286.png 300w\" sizes=\"(max-width: 524px) 100vw, 524px\" \/><\/a><figcaption id=\"caption-attachment-34379\" class=\"wp-caption-text\">2 Vaadin Project<\/figcaption><\/figure><\/p>\n<p>Click&nbsp;next and name your project then click finish.<\/p>\n<h2><a name=\"toc500\"><\/a>5. The example<\/h2>\n<h3><a name=\"toc510\"><\/a>5.1 Make a design<\/h3>\n<p>The design is the blueprint of our program. It is better to invest some time making a good design and when the design is ready, start coding the application.<br \/>\nIn our case we have an application that has a menu and three views, each button on the menu changes the view.&nbsp;We have a welcome view that displays a welcome label.<br \/>\nAn input view to input some fields, and a view to show all the data.<\/p>\n<p><figure id=\"attachment_39528\" aria-describedby=\"caption-attachment-39528\" style=\"width: 400px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2016\/07\/3-Design.png\"><img decoding=\"async\" class=\"size-full wp-image-39528\" src=\"http:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2016\/07\/3-Design.png\" alt=\"3 Design\" width=\"400\" height=\"161\" srcset=\"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2016\/07\/3-Design.png 400w, https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2016\/07\/3-Design-300x121.png 300w\" sizes=\"(max-width: 400px) 100vw, 400px\" \/><\/a><figcaption id=\"caption-attachment-39528\" class=\"wp-caption-text\">3 Design<\/figcaption><\/figure><\/p>\n<h3><a name=\"toc520\"><\/a>5.2 Annotations<\/h3>\n<p>It is recommended to use annotations to define our servlet, because Vaadin uses annotations by default for convenience.<br \/>\nConvenience over configuration is a design pattern used to avoid huge configuration files and promotes flexibility.<\/p>\n<p><span style=\"text-decoration: underline;\"><em>Annotations<\/em><\/span><\/p>\n<pre class=\"brush:java\">\t@WebServlet(value = \"\/*\", asyncSupported = true)\n\t@VaadinServletConfiguration(productionMode = false, ui = VaadinbestpracticesUI.class, widgetset = \"com.example.vaadinbestpractices.widgetset.VaadinbestpracticesWidgetset\")\n<\/pre>\n<h3><a name=\"toc530\"><\/a>5.3 Navigator<\/h3>\n<p>Use a navigator to change the views in the application. The navigator was created for this task.&nbsp;We use the navigator in our init application method.<\/p>\n<h4><a name=\"toc531\"><\/a>5.3.1 Layout &amp; content<\/h4>\n<p>In our init method, first we create the layout and the content panel to use with the navigator.<\/p>\n<p><span style=\"text-decoration: underline;\"><em>Layout &amp; content<\/em><\/span><\/p>\n<pre class=\"brush:java\">\t\tfinal VerticalLayout layout = new VerticalLayout();\n\t\tlayout.setMargin(true);\n\t\tsetContent(layout);\n\t\tPanel contentPanel = new Panel(\"Main Panel\");\n\t\tcontentPanel.setSizeUndefined();\n<\/pre>\n<p><code>final VerticalLayout layout = new VerticalLayout();<\/code> Creates the layout.<br \/>\n<code>layout.setMargin(true);<\/code> Sets the margin of the layout.<\/p>\n<p><code>setContent(layout);<\/code> Sets the layout as the main layout.<br \/>\n<code>Panel contentPanel = new Panel(\"Main Panel\");<\/code> Creates a panel yo use with the navigator.<\/p>\n<p><code>contentPanel.setSizeUndefined();<\/code> Sets the size of the panel.<\/p>\n<h4><a name=\"toc532\"><\/a>5.3.2 Navigator views<\/h4>\n<p>We create the navigator and attach the views used in our application.&nbsp;In this case we have 3 views: welcome, input and data.<\/p>\n<p><span style=\"text-decoration: underline;\"><em>Navigators views<\/em><\/span><\/p>\n<pre class=\"brush:java\">\t\tnew Navigator(this, contentPanel);\n\t\tgetNavigator().addView(InputPage.NAME, InputPage.class);\n\t\tgetNavigator().addView(WelcomePage.NAME, WelcomePage.class);\n\t\tgetNavigator().addView(DataPage.NAME, DataPage.class);\n<\/pre>\n<p><code>new Navigator(this, contentPanel);<\/code> Creates the navigator using the panel as a placeholder.<br \/>\n<code>getNavigator().addView(InputPage.NAME, InputPage.class);<\/code> Adds the input view to the navigator.<\/p>\n<p><code>getNavigator().addView(WelcomePage.NAME, WelcomePage.class);<\/code> Adds the welcome view to the navigator.<br \/>\n<code>getNavigator().addView(DataPage.NAME, DataPage.class);<\/code> Adds the data view to the navigator.<\/p>\n<h4><a name=\"toc533\"><\/a>5.3.3 Menu listeners<\/h4>\n<p>We are going to navigate our application using a menu.&nbsp;Each time we click on a menu button the navigator changes the view.&nbsp;For each menu button we have a listener to change the view.<\/p>\n<p><span style=\"text-decoration: underline;\"><em>Menubar listeners<\/em><\/span><\/p>\n<pre class=\"brush:java\">\t\tMenuBar.Command welcome = new Command() {\n\t\t\t\n\t\t\t@Override\n\t\t\tpublic void menuSelected(MenuItem selectedItem) {\n\t\t\t\tgetNavigator().navigateTo(WelcomePage.NAME);\n\t\t\t}\n\t\t};\n\t\t\n\t\tMenuBar.Command input = new Command() {\n\t\t\t\n\t\t\t@Override\n\t\t\tpublic void menuSelected(MenuItem selectedItem) {\n\t\t\t\tgetNavigator().navigateTo(InputPage.NAME);\n\t\t\t}\n\t\t};\n\n\t\tMenuBar.Command data = new Command() {\n\t\t\t\n\t\t\t@Override\n\t\t\tpublic void menuSelected(MenuItem selectedItem) {\n\t\t\t\tgetNavigator().navigateTo(DataPage.NAME);\n\t\t\t}\n\t\t};\n<\/pre>\n<p><code>MenuBar.Command welcome = new Command()<\/code> Creates a new menu command welcome.<br \/>\n<code>getNavigator().navigateTo(WelcomePage.NAME);<\/code> Navigates to the welcome page.<\/p>\n<p><code>MenuBar.Command input = new Command()<\/code> Creates a new menu command input.<br \/>\n<code>getNavigator().navigateTo(InputPage.NAME);<\/code> Navigates to the input view.<\/p>\n<p><code>MenuBar.Command data = new Command()<\/code> Creates a new menu command data.<br \/>\n<code>getNavigator().navigateTo(DataPage.NAME);<\/code> Navigates to the data view.<\/p>\n<h4><a name=\"toc534\"><\/a>5.3.4 Menu<\/h4>\n<p>We create the menu and attach the buttons to it.&nbsp;When a button is attached to the menu we use the menu command listener created before.<\/p>\n<p><span style=\"text-decoration: underline;\"><em>Main menu<\/em><\/span><\/p>\n<pre class=\"brush:java\">\t\tMenuBar mainMenu = new MenuBar();\n\t\tmainMenu.addItem(\"Welcome\", FontAwesome.ARROW_CIRCLE_LEFT, welcome);\n\t\tmainMenu.addItem(\"Input\", FontAwesome.WEIXIN, input);\n\t\tmainMenu.addItem(\"Data\", FontAwesome.LIST, data);\n<\/pre>\n<p><code>MenuBar mainMenu = new MenuBar();<\/code> Creates a new menu bar.<br \/>\n<code>mainMenu.addItem(\"Welcome\", FontAwesome.ARROW_CIRCLE_LEFT, welcome);<\/code> Add the welcome button to the menu.<\/p>\n<p><code>mainMenu.addItem(\"Input\", FontAwesome.WEIXIN, input);<\/code> Add the input button to the menu.<br \/>\n<code>mainMenu.addItem(\"Data\", FontAwesome.LIST, data);<\/code> Add the data button to the menu.<\/p>\n<h4><a name=\"toc535\"><\/a>5.3.5 Navigator initial page<\/h4>\n<p>We redirect the navigator to the page we want to show when the application is started.<\/p>\n<p><span style=\"text-decoration: underline;\"><em>Navigator initial page<\/em><\/span><\/p>\n<pre class=\"brush:java\">\t\tlayout.addComponent(mainMenu);\n\t\tlayout.addComponent(contentPanel);\n\t\tgetNavigator().navigateTo(WelcomePage.NAME);\n<\/pre>\n<p><code>layout.addComponent(mainMenu);<\/code> Adds the menu to the layout.<br \/>\n<code>layout.addComponent(contentPanel);<\/code> Adds the content panel to the layout.<\/p>\n<p><code>getNavigator().navigateTo(WelcomePage.NAME);<\/code> Navigates to the welcome page when the application is loaded.<\/p>\n<h4><a name=\"toc536\"><\/a>5.3.6 Welcome page<\/h4>\n<p>The welcome page is used as the initial page for the navigator.<div style=\"display:inline-block; margin: 15px 0;\"> <div id=\"adngin-JavaCodeGeeks_incontent_video-0\" style=\"display:inline-block;\"><\/div> <\/div><\/p>\n<p><span style=\"text-decoration: underline;\"><em>Welcome page<\/em><\/span><\/p>\n<pre class=\"brush:java\">public class WelcomePage extends VerticalLayout implements View {\n\n\tprivate static final long serialVersionUID = 1L;\n\n\tpublic static final String NAME = \"welcomepage\";\n\t\n\tpublic WelcomePage() {\n\t\tsetMargin(true);\n\t\tsetSpacing(true);\n\t\tLabel welcome = new Label(\"Welcome\");\n\t\twelcome.addStyleName(\"h1\");\n\t\taddComponent(welcome);\n\t}\n\n}\n<\/pre>\n<p><code>public class WelcomePage extends VerticalLayout implements View<\/code> The welcome page used by the navigator must implements the view interface.<br \/>\n<code>public static final String NAME = \"welcomepage\";<\/code> The id of the welcome page to use with the navigator.<\/p>\n<p><code>setMargin(true);<\/code> Sets the margin of the layout.<br \/>\n<code>setSpacing(true);<\/code> Sets the spacing of the layout.<\/p>\n<p><code>Label welcome = new Label(\"Welcome\");<\/code> Creates a label.<br \/>\n<code>welcome.addStyleName(\"h1\");<\/code> Adds a predefined style to the label.<\/p>\n<p><code>addComponent(welcome);<\/code> Adds the label to the layout.<\/p>\n<h3><a name=\"toc540\"><\/a>5.4 Validate user input<\/h3>\n<p>The data entered by a user is prone to errors and mistakes and is sane to have a validation process in the input of the data.<br \/>\nWe have a view with three input fields to show the validation process.<br \/>\nTo validate our input fields we use the Vaadin validator.<\/p>\n<h4><a name=\"toc541\"><\/a>5.4.1 Input form<\/h4>\n<p><span style=\"text-decoration: underline;\"><em>Input form<\/em><\/span><\/p>\n<pre class=\"brush:java\">\t\tFormLayout inputForm = new FormLayout();\n\t\tinputForm.setMargin(true);\n\t\tinputForm.setSpacing(true);\n\t\tinputPanel.setContent(inputForm);\n<\/pre>\n<p><code>FormLayout inputForm = new FormLayout();<\/code> Creates the input form.<br \/>\n<code>inputForm.setMargin(true);<\/code> Sets the margin of the input form.<\/p>\n<p><code>inputForm.setSpacing(true);<\/code> Sets the spacing of the input form.<br \/>\n<code>inputPanel.setContent(inputForm);<\/code> Sets the input form as the content of the input panel.<\/p>\n<h4><a name=\"toc542\"><\/a>5.4.2 Name field validator<\/h4>\n<p><span style=\"text-decoration: underline;\"><em>Name Field<\/em><\/span><\/p>\n<pre class=\"brush:java\">\t\tTextField name = new TextField(\"Name\");\n\t\tname.setNullSettingAllowed(true);\n\t\tname.setNullRepresentation(\"\");\n\t\tname.addValidator(new StringLengthValidator(\"Name must have 3-15 characters lenght\", 3, 15, true));\n\t\tname.setValidationVisible(true);\n\t\tinputForm.addComponent(name);\n<\/pre>\n<p><code>TextField name = new TextField(\"Name\");<\/code> Creates a name text field.<br \/>\n<code>name.setNullSettingAllowed(true);<\/code> Allows null in the text field.<\/p>\n<p><code>name.setNullRepresentation(\"\");<\/code> Sets the null representation to a empty string.<br \/>\n<code>name.addValidator(new StringLengthValidator(\"Name must have 3-15 characters lenght\", 3, 15, true));<\/code><br \/>\nAdds the validator to the text field.<br \/>\nThe validator checks that the string entered into the text field has a length greater than 3 and less than 15.<br \/>\n<code>name.setValidationVisible(true);<\/code> Sets the validator visible.<br \/>\n<code>inputForm.addComponent(name);<\/code> Add the text field to the form.<\/p>\n<h4><a name=\"toc543\"><\/a>5.4.3 Surname field validator<\/h4>\n<p><span style=\"text-decoration: underline;\"><em>Surname Field<\/em><\/span><\/p>\n<pre class=\"brush:java\">\t\tTextField surname = new TextField(\"Surname\");\n\t\tsurname.setNullSettingAllowed(true);\n\t\tsurname.setNullRepresentation(\"\");\n\t\tsurname.addValidator(new StringLengthValidator(\"Surname must have 3-15 characters lenght\", 3, 15, true));\n\t\tsurname.setValidationVisible(true);\n\t\tinputForm.addComponent(surname);\n<\/pre>\n<p><code>TextField surname = new TextField(\"Surname\");<\/code> Creates a text field to the surname.<br \/>\n<code>surname.setNullSettingAllowed(true);<\/code> Alows null in the text field.<\/p>\n<p><code>surname.setNullRepresentation(\"\");<\/code> Sets the null representation to a empty string.<br \/>\n<code>surname.addValidator(new StringLengthValidator(\"Surname must have 3-15 characters lenght\", 3, 15, true));<\/code><br \/>\nAdds the validator to the text field.<br \/>\nThe validator checks that the string entered into the text field has a length greater than 3 and less than 15.<br \/>\n<code>surname.setValidationVisible(true);<\/code> Sets the validator visible.<br \/>\n<code>inputForm.addComponent(surname);<\/code> Add the text field to the form.<\/p>\n<h4><a name=\"toc544\"><\/a>5.4.4 Age field validator<\/h4>\n<p><span style=\"text-decoration: underline;\"><em>Age field<\/em><\/span><\/p>\n<pre class=\"brush:java\">\t\tTextField age = new TextField(\"Age\");\n\t\tage.setNullRepresentation(\"0\");\n\t\tage.addValidator(new IntegerRangeValidator(\"Age must be between 1 and 110\", 1, 110));\n\t\tinputForm.addComponent(age);\n<\/pre>\n<p><code>TextField age = new TextField(\"Age\");<\/code> Creates a text field for the age.<br \/>\n<code>age.setNullRepresentation(\"0\");<\/code> Sets the null representation to the &#8220;0&#8221; string.<\/p>\n<p><code>age.addValidator(new IntegerRangeValidator(\"Age must be between 1 and 110\", 1, 110));<\/code><br \/>\nAdds the validator to the field.<br \/>\nThe value of the input must be an integer between 1 and 110.<br \/>\n<code>inputForm.addComponent(age);<\/code> Adds the text fiel to the form.<\/p>\n<h4><a name=\"toc545\"><\/a>5.4.5 Age field validator<\/h4>\n<p><span style=\"text-decoration: underline;\"><em>Validation buttons<\/em><\/span><\/p>\n<pre class=\"brush:java\">\t\tHorizontalLayout btLayout = new HorizontalLayout();\n\t\tButton btSave = new Button(\"Save\");\n\t\tbtLayout.addComponent(btSave);\n\t\tButton btClear = new Button(\"Clear\");\n\t\tbtLayout.addComponent(btClear);\n\t\tinputForm.addComponent(btLayout);\n<\/pre>\n<p><code>HorizontalLayout btLayout = new HorizontalLayout();<\/code> Creates a horizontal layout for the buttons.<br \/>\n<code>Button btSave = new Button(\"Save\");<\/code> Creates a button for save the form data.<\/p>\n<p><code>btLayout.addComponent(btSave);<\/code> Adds the button to the layout.<br \/>\n<code>Button btClear = new Button(\"Clear\");<\/code> Creates a new button to clear the fields.<\/p>\n<p><code>btLayout.addComponent(btClear);<\/code> Adds the clear button to the layout.<br \/>\n<code>inputForm.addComponent(btLayout);<\/code> Adds the button layout to the form.<\/p>\n<h4><a name=\"toc546\"><\/a>5.4.6 Validation process<\/h4>\n<p><span style=\"text-decoration: underline;\"><em>Checks if the fields are empty<\/em><\/span><\/p>\n<pre class=\"brush:java\">\t\tbtSave.addClickListener(new ClickListener() {\n\t\t\t\n\t\t\t@Override\n\t\t\tpublic void buttonClick(ClickEvent event) {\n\t\t\t\tif(!name.isEmpty() &amp;&amp; !surname.isEmpty() &amp;&amp; !age.isEmpty()){\n\n\t\t\t\t}else{\n\t\t\t\t\tNotification.show(\"All fields must be filled\");\n\t\t\t\t}\n<\/pre>\n<p>Checks that all fields have a value otherwise it shows a notification.<\/p>\n<p><span style=\"text-decoration: underline;\"><em>Try to validate<\/em><\/span><\/p>\n<pre class=\"brush:java\">\t\t\t\t\tBoolean save = true;\n\t\t\t\t\ttry{\n\t\t\t\t\t\tname.validate();\n\t\t\t\t\t\t\n\t\t\t\t\t}catch(InvalidValueException e){\n\t\t\t\t\t\tsave = false;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\ttry{\n\t\t\t\t\t\tsurname.validate();\n\t\t\t\t\t\t\n\t\t\t\t\t}catch(InvalidValueException e){\n\t\t\t\t\t\tsave = false;\n\t\t\t\t\t}\n\n\t\t\t\t\ttry{\n\t\t\t\t\t\tage.validate();\n\t\t\t\t\t\t\n\t\t\t\t\t}catch(InvalidValueException e){\n\t\t\t\t\t\tsave = false;\n\t\t\t\t\t}\n<\/pre>\n<p>Tries to validate the fields.&nbsp;A boolean is used to keep the status of the validation process.&nbsp;If any validation fails we set save to false.<\/p>\n<p><span style=\"text-decoration: underline;\"><em>Save click listener<\/em><\/span><\/p>\n<pre class=\"brush:java\">\t\t\t\t\tif(save){\n\t\t\t\t\t\tVaadinbestpracticesUI.dataBean.addBean(\n\t\t\t\t\t\t\t\tnew DataBean(name.getValue(), surname.getValue(), Integer.valueOf(age.getValue())));\n\t\t\t\t\t\tNotification.show(\"Data saved!\");\n\t\t\t\t\t\tname.setValue(\"\");\n\t\t\t\t\t\tsurname.setValue(\"\");\n\t\t\t\t\t\tage.setValue(\"0\");\n\t\t\t\t\t\tbtSave.setComponentError(null);\n\t\t\t\t\t}\n<\/pre>\n<p><code>if(save)<\/code> We check the boolean to save.<br \/>\n<code>VaadinbestpracticesUI.dataBean.addBean(new DataBean(name.getValue(), surname.getValue(), Integer.valueOf(age.getValue())));<\/code><br \/>\nWe create a bean with the new data.<br \/>\n<code>Notification.show(\"Data saved!\");<\/code> Notifies that the data is saved.<br \/>\n<code>name.setValue(\"\");<\/code> Clears the name field.<\/p>\n<p><code>surname.setValue(\"\");<\/code> Clears the surname field.<br \/>\n<code>age.setValue(\"0\");<\/code> Clears the age field with the null value.<\/p>\n<h4><a name=\"toc547\"><\/a>5.4.7 Clear fields<\/h4>\n<p><span style=\"text-decoration: underline;\"><em>java<\/em><\/span><\/p>\n<pre class=\"brush:java\">\t\tbtClear.addClickListener(new ClickListener() {\n\t\t\t\n\t\t\t@Override\n\t\t\tpublic void buttonClick(ClickEvent event) {\n\t\t\t\tname.clear();\n\t\t\t\tsurname.clear();\n\t\t\t\tage.clear();\n\t\t\t}\n\t\t});\n<\/pre>\n<p><code>name.clear();<\/code> Clears the name.<br \/>\n<code>surname.clear();<\/code> Clears the surname.<br \/>\n<code>age.clear();<\/code> Clears the age.<\/p>\n<h3><a name=\"toc550\"><\/a>5.5 Use containers in fields<\/h3>\n<p>The container allow us to bind our input fields to a data type and help in the validation process.<\/p>\n<h4><a name=\"toc551\"><\/a>5.5.1 Property sets<\/h4>\n<p><span style=\"text-decoration: underline;\"><em>java<\/em><\/span><\/p>\n<pre class=\"brush:java\">\t\tPropertysetItem fProperties = new PropertysetItem();\n\t\tfProperties.addItemProperty(\"nameValidator\", new ObjectProperty(\"\"));\n\t\tfProperties.addItemProperty(\"surnameValidator\", new ObjectProperty(\"\"));\n\t\tfProperties.addItemProperty(\"integerValidator\", new ObjectProperty(0));\n<\/pre>\n<p><code>PropertysetItem fProperties = new PropertysetItem();<\/code> Creates a property set.<br \/>\n<code>fProperties.addItemProperty(\"nameValidator\", new ObjectProperty(\"\"));<\/code> Adds the name property.<\/p>\n<p><code>fProperties.addItemProperty(\"surnameValidator\", new ObjectProperty(\"\"));<\/code> Adds the surname property.<br \/>\n<code>fProperties.addItemProperty(\"integerValidator\", new ObjectProperty(0)<\/code> Adds the age property.<\/p>\n<h4><a name=\"toc552\"><\/a>5.5.2 Field groups<\/h4>\n<p><span style=\"text-decoration: underline;\"><em>java<\/em><\/span><\/p>\n<pre class=\"brush:java\">\t\tFieldGroup fGroup = new FieldGroup(fProperties);\n\t\tfGroup.bind(name, \"nameValidator\");\n\t\tfGroup.bind(surname, \"surnameValidator\");\n\t\tfGroup.bind(age, \"integerValidator\");\n<\/pre>\n<p><code>FieldGroup fGroup = new FieldGroup(fProperties);<\/code> Creates a field group.<br \/>\n<code>fGroup.bind(name, \"nameValidator\");<\/code> Binds the name text field to the name property.<\/p>\n<p><code>fGroup.bind(surname, \"surnameValidator\");<\/code> Binds the surname text field to the surname property.<br \/>\n<code>fGroup.bind(age, \"integerValidator\");<\/code> Binds the age text field to the age property.<\/p>\n<h3><a name=\"toc560\"><\/a>5.6 Separate the UI from the data<\/h3>\n<p>Separation of the data from the UI allow us to change the UI or the data store without affecting each other.[ulp id=&#8217;YBvYYzEYBUrADqmI&#8217;]<\/p>\n<p>In the image the UI, the datasets and the database are in different layers.<br \/>\nIf you change any of these three pieces you only have to define the same interfaces to communicate each other.<br \/>\nThe change of one layer doesn&#8217;t have to affect any other layer.&nbsp;If you want to change the database from MySQL to PostgreSQL for example, this change is transparent to the UI code.<\/p>\n<p><figure id=\"attachment_39529\" aria-describedby=\"caption-attachment-39529\" style=\"width: 409px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2016\/07\/4-Design-pattern.png\"><img decoding=\"async\" class=\"size-full wp-image-39529\" src=\"http:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2016\/07\/4-Design-pattern.png\" alt=\"4 Design pattern\" width=\"409\" height=\"205\" srcset=\"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2016\/07\/4-Design-pattern.png 409w, https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2016\/07\/4-Design-pattern-300x150.png 300w\" sizes=\"(max-width: 409px) 100vw, 409px\" \/><\/a><figcaption id=\"caption-attachment-39529\" class=\"wp-caption-text\">4 Design pattern<\/figcaption><\/figure><\/p>\n<p><span style=\"text-decoration: underline;\"><em>Data<\/em><\/span><\/p>\n<pre class=\"brush:java\">public class DataBean implements Serializable {\n\n\tprivate static final long serialVersionUID = 1L;\n\t\n\tprivate String  name;\n\tprivate String  surname;\n\tprivate Integer age;\n\t\n\tpublic DataBean(String pName, String pSurname, Integer pAge) {\n\t\tthis.name = pName;\n\t\tthis.surname = pSurname;\n\t\tthis.age = pAge;\n\t}\n\n\tpublic String getName() {\n\t\treturn name;\n\t}\n\n\tpublic void setName(String name) {\n\t\tthis.name = name;\n\t}\n\n\tpublic String getSurname() {\n\t\treturn surname;\n\t}\n\n\tpublic void setSurname(String surname) {\n\t\tthis.surname = surname;\n\t}\n\n\tpublic Integer getAge() {\n\t\treturn age;\n\t}\n\n\tpublic void setAge(Integer age) {\n\t\tthis.age = age;\n\t}\n\n}\n<\/pre>\n<p>This is a standard java class that extends serializable.<br \/>\nThis class has three fields to store the name, the surname and the age with its getters and setters.<\/p>\n<p><span style=\"text-decoration: underline;\"><em>Data View<\/em><\/span><\/p>\n<pre class=\"brush:java\">\tpublic static final String NAME = \"datapage\";\n\n\tpublic DataPage() {\n\t\tTable dataTable = new Table(\"Data Table\", VaadinbestpracticesUI.dataBean);\n\t\tdataTable.setVisibleColumns(new Object[]{\"name\", \"surname\", \"age\"});\n\t\tdataTable.setHeight(\"200px\");\n\t\taddComponent(dataTable);\n\t}\n<\/pre>\n<p><code>public static final String NAME = \"datapage\";<\/code> Creates the id of the data view.<br \/>\n<code>Table dataTable = new Table(\"Data Table\", VaadinbestpracticesUI.dataBean);<\/code><br \/>\nCreates a table to show all the records we have loaded.<br \/>\nThe table is using the container as a data source.<br \/>\n<code>dataTable.setVisibleColumns(new Object[]{\"name\", \"surname\", \"age\"});<\/code> Sets the visible columns.<br \/>\n<code>dataTable.setHeight(\"200px\");<\/code> Sets the height of the table.<\/p>\n<p><code>addComponent(dataTable);<\/code> Adds the table to the layout.<\/p>\n<h3><a name=\"toc570\"><\/a>5.7 Deploy on https<\/h3>\n<p>If our application is going to be on a public domain is better to deploy it using http secure protocol.<br \/>\nHttps encrypts our connection protecting us for some kind of attacks that could compromise our data.<\/p>\n<h2><a name=\"toc600\"><\/a>6. The complete source code<\/h2>\n<h3><a name=\"toc610\"><\/a>6.1 VaadinbestpracticesUI.java<\/h3>\n<p><span style=\"text-decoration: underline;\"><em>VaadinbestpracticesUI.java<\/em><\/span><\/p>\n<pre class=\"brush:java\">package com.example.vaadinbestpractices;\n\nimport javax.servlet.annotation.WebServlet;\n\nimport com.example.vaadinbestpractices.data.DataBean;\nimport com.vaadin.annotations.Theme;\nimport com.vaadin.annotations.VaadinServletConfiguration;\nimport com.vaadin.data.util.BeanContainer;\nimport com.vaadin.navigator.Navigator;\nimport com.vaadin.server.FontAwesome;\nimport com.vaadin.server.VaadinRequest;\nimport com.vaadin.server.VaadinServlet;\nimport com.vaadin.ui.MenuBar;\nimport com.vaadin.ui.MenuBar.Command;\nimport com.vaadin.ui.MenuBar.MenuItem;\nimport com.vaadin.ui.Panel;\nimport com.vaadin.ui.UI;\nimport com.vaadin.ui.VerticalLayout;\n\n@SuppressWarnings(\"serial\")\n@Theme(\"vaadinbestpractices\")\npublic class VaadinbestpracticesUI extends UI {\n\t\n\tpublic static BeanContainer dataBean;\t\n\t\n\t@WebServlet(value = \"\/*\", asyncSupported = true)\n\t@VaadinServletConfiguration(productionMode = false, ui = VaadinbestpracticesUI.class, widgetset = \"com.example.vaadinbestpractices.widgetset.VaadinbestpracticesWidgetset\")\n\tpublic static class Servlet extends VaadinServlet {\n\t}\n\n\t@Override\n\tprotected void init(VaadinRequest request) {\n\t\tfinal VerticalLayout layout = new VerticalLayout();\n\t\tlayout.setMargin(true);\n\t\tsetContent(layout);\n\t\tPanel contentPanel = new Panel(\"Main Panel\");\n\t\tcontentPanel.setSizeUndefined();\n\t\tdataBean = new BeanContainer(DataBean.class);\n\t\tdataBean.setBeanIdProperty(\"name\");\n\t\t\n\t\tnew Navigator(this, contentPanel);\n\t\tgetNavigator().addView(InputPage.NAME, InputPage.class);\n\t\tgetNavigator().addView(WelcomePage.NAME, WelcomePage.class);\n\t\tgetNavigator().addView(DataPage.NAME, DataPage.class);\n\n\t\tMenuBar.Command welcome = new Command() {\n\t\t\t\n\t\t\t@Override\n\t\t\tpublic void menuSelected(MenuItem selectedItem) {\n\t\t\t\tgetNavigator().navigateTo(WelcomePage.NAME);\n\t\t\t}\n\t\t};\n\t\t\n\t\tMenuBar.Command input = new Command() {\n\t\t\t\n\t\t\t@Override\n\t\t\tpublic void menuSelected(MenuItem selectedItem) {\n\t\t\t\tgetNavigator().navigateTo(InputPage.NAME);\n\t\t\t}\n\t\t};\n\n\t\tMenuBar.Command data = new Command() {\n\t\t\t\n\t\t\t@Override\n\t\t\tpublic void menuSelected(MenuItem selectedItem) {\n\t\t\t\tgetNavigator().navigateTo(DataPage.NAME);\n\t\t\t}\n\t\t};\n\n\t\tMenuBar mainMenu = new MenuBar();\n\t\tmainMenu.addItem(\"Welcome\", FontAwesome.ARROW_CIRCLE_LEFT, welcome);\n\t\tmainMenu.addItem(\"Input\", FontAwesome.WEIXIN, input);\n\t\tmainMenu.addItem(\"Data\", FontAwesome.LIST, data);\n\t\t\n\t\tlayout.addComponent(mainMenu);\n\t\tlayout.addComponent(contentPanel);\n\t\tgetNavigator().navigateTo(WelcomePage.NAME);\n\t}\n\n}\n<\/pre>\n<h3><a name=\"toc620\"><\/a>6.2 WelcomePage.java<\/h3>\n<p><span style=\"text-decoration: underline;\"><em>WelcomePage.java<\/em><\/span><\/p>\n<pre class=\"brush:java\">package com.example.vaadinbestpractices;\n\nimport com.vaadin.navigator.View;\nimport com.vaadin.navigator.ViewChangeListener.ViewChangeEvent;\nimport com.vaadin.ui.Label;\nimport com.vaadin.ui.VerticalLayout;\n\npublic class WelcomePage extends VerticalLayout implements View {\n\n\tprivate static final long serialVersionUID = 1L;\n\n\tpublic static final String NAME = \"welcomepage\";\n\t\n\tpublic WelcomePage() {\n\t\tsetMargin(true);\n\t\tsetSpacing(true);\n\t\tLabel welcome = new Label(\"Welcome\");\n\t\twelcome.addStyleName(\"h1\");\n\t\taddComponent(welcome);\n\t}\n\n\t@Override\n\tpublic void enter(ViewChangeEvent event) {\n\n\t}\n\n}\n<\/pre>\n<h3><a name=\"toc630\"><\/a>6.3 InputPage.java<\/h3>\n<p><span style=\"text-decoration: underline;\"><em>InputPage.java<\/em><\/span><\/p>\n<pre class=\"brush:java\">package com.example.vaadinbestpractices;\n\nimport com.example.vaadinbestpractices.data.DataBean;\nimport com.google.appengine.api.memcache.InvalidValueException;\nimport com.vaadin.data.fieldgroup.FieldGroup;\nimport com.vaadin.data.util.ObjectProperty;\nimport com.vaadin.data.util.PropertysetItem;\nimport com.vaadin.data.validator.IntegerRangeValidator;\nimport com.vaadin.data.validator.StringLengthValidator;\nimport com.vaadin.navigator.View;\nimport com.vaadin.navigator.ViewChangeListener.ViewChangeEvent;\nimport com.vaadin.ui.Button;\nimport com.vaadin.ui.Button.ClickEvent;\nimport com.vaadin.ui.Button.ClickListener;\nimport com.vaadin.ui.FormLayout;\nimport com.vaadin.ui.HorizontalLayout;\nimport com.vaadin.ui.Notification;\nimport com.vaadin.ui.Panel;\nimport com.vaadin.ui.TextField;\nimport com.vaadin.ui.VerticalLayout;\n\n@SuppressWarnings(\"serial\")\npublic class InputPage extends VerticalLayout implements View {\n\n\tpublic static final String NAME = \"inputpage\";\n\t\n\tpublic InputPage() {\n\t\tPanel inputPanel = new Panel(\"Input data\");\n\t\tinputPanel.setSizeUndefined();\n\t\taddComponent(inputPanel);\n\t\t\n\t\tPropertysetItem fProperties = new PropertysetItem();\n\t\tfProperties.addItemProperty(\"nameValidator\", new ObjectProperty(\"\"));\n\t\tfProperties.addItemProperty(\"surnameValidator\", new ObjectProperty(\"\"));\n\t\tfProperties.addItemProperty(\"integerValidator\", new ObjectProperty(0));\n\t\t\n\t\tFormLayout inputForm = new FormLayout();\n\n\t\tTextField name = new TextField(\"Name\");\n\t\tname.setNullSettingAllowed(true);\n\t\tname.setNullRepresentation(\"\");\n\t\tname.addValidator(new StringLengthValidator(\"Name must have 3-15 characters lenght\", 3, 15, true));\n\t\tname.setValidationVisible(true);\n\t\tinputForm.addComponent(name);\n\n\t\tTextField surname = new TextField(\"Surname\");\n\t\tsurname.setNullSettingAllowed(true);\n\t\tsurname.setNullRepresentation(\"\");\n\t\tsurname.addValidator(new StringLengthValidator(\"Surname must have 3-15 characters lenght\", 3, 15, true));\n\t\tsurname.setValidationVisible(true);\n\t\tinputForm.addComponent(surname);\n\n\t\tTextField age = new TextField(\"Age\");\n\t\tage.setNullRepresentation(\"0\");\n\t\tage.addValidator(new IntegerRangeValidator(\"Age must be between 1 and 110\", 1, 110));\n\t\tinputForm.addComponent(age);\n\t\t\n\t\tHorizontalLayout btLayout = new HorizontalLayout();\n\t\tButton btSave = new Button(\"Save\");\n\t\tbtLayout.addComponent(btSave);\n\t\tButton btClear = new Button(\"Clear\");\n\t\tbtLayout.addComponent(btClear);\n\t\tinputForm.addComponent(btLayout);\n\t\t\n\t\tbtSave.addClickListener(new ClickListener() {\n\t\t\t\n\t\t\t@Override\n\t\t\tpublic void buttonClick(ClickEvent event) {\n\t\t\t\tif(!name.isEmpty() &amp;&amp; !surname.isEmpty() &amp;&amp; !age.isEmpty()){\n\t\t\t\t\tBoolean save = true;\n\t\t\t\t\ttry{\n\t\t\t\t\t\tname.validate();\n\t\t\t\t\t\t\n\t\t\t\t\t}catch(InvalidValueException e){\n\t\t\t\t\t\tsave = false;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\ttry{\n\t\t\t\t\t\tsurname.validate();\n\t\t\t\t\t\t\n\t\t\t\t\t}catch(InvalidValueException e){\n\t\t\t\t\t\tsave = false;\n\t\t\t\t\t}\n\n\t\t\t\t\ttry{\n\t\t\t\t\t\tage.validate();\n\t\t\t\t\t\t\n\t\t\t\t\t}catch(InvalidValueException e){\n\t\t\t\t\t\tsave = false;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif(save){\n\t\t\t\t\t\tVaadinbestpracticesUI.dataBean.addBean(\n\t\t\t\t\t\t\t\tnew DataBean(name.getValue(), surname.getValue(), Integer.valueOf(age.getValue())));\n\t\t\t\t\t\tNotification.show(\"Data saved!\");\n\t\t\t\t\t\tname.setValue(\"\");\n\t\t\t\t\t\tsurname.setValue(\"\");\n\t\t\t\t\t\tage.setValue(\"0\");\n\t\t\t\t\t\tbtSave.setComponentError(null);\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tNotification.show(\"All fields must be filled\");\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\tbtClear.addClickListener(new ClickListener() {\n\t\t\t\n\t\t\t@Override\n\t\t\tpublic void buttonClick(ClickEvent event) {\n\t\t\t\tname.clear();\n\t\t\t\tsurname.clear();\n\t\t\t\tage.clear();\n\t\t\t}\n\t\t});\n\t\t\n\t\tFieldGroup fGroup = new FieldGroup(fProperties);\n\t\tfGroup.bind(name, \"nameValidator\");\n\t\tfGroup.bind(surname, \"surnameValidator\");\n\t\tfGroup.bind(age, \"integerValidator\");\n\t\t\n\t\tinputForm.setMargin(true);\n\t\tinputForm.setSpacing(true);\n\t\tinputPanel.setContent(inputForm);\n\t}\n\n\t@Override\n\tpublic void enter(ViewChangeEvent event) {\n\t\t\n\t}\n\n}\n<\/pre>\n<h3><a name=\"toc640\"><\/a>6.4 DataPage.java<\/h3>\n<p><span style=\"text-decoration: underline;\"><em>DataPage.java<\/em><\/span><\/p>\n<pre class=\"brush:java\">package com.example.vaadinbestpractices;\n\nimport com.vaadin.navigator.View;\nimport com.vaadin.navigator.ViewChangeListener.ViewChangeEvent;\nimport com.vaadin.ui.Table;\nimport com.vaadin.ui.VerticalLayout;\n\npublic class DataPage extends VerticalLayout implements View {\n\n\tprivate static final long serialVersionUID = 1L;\n\n\tpublic static final String NAME = \"datapage\";\n\n\tpublic DataPage() {\n\t\tTable dataTable = new Table(\"Data Table\", VaadinbestpracticesUI.dataBean);\n\t\tdataTable.setVisibleColumns(new Object[]{\"name\", \"surname\", \"age\"});\n\t\tdataTable.setHeight(\"200px\");\n\t\taddComponent(dataTable);\n\t}\n\n\t@Override\n\tpublic void enter(ViewChangeEvent event) {\n\n\t}\n\n}\n<\/pre>\n<h3><a name=\"toc650\"><\/a>6.5 DataBean.java<\/h3>\n<p><span style=\"text-decoration: underline;\"><em>DataBean.java<\/em><\/span><\/p>\n<pre class=\"brush:java\">package com.example.vaadinbestpractices.data;\n\nimport java.io.Serializable;\n\npublic class DataBean implements Serializable {\n\n\tprivate static final long serialVersionUID = 1L;\n\t\n\tprivate String  name;\n\tprivate String  surname;\n\tprivate Integer age;\n\t\n\tpublic DataBean(String pName, String pSurname, Integer pAge) {\n\t\tthis.name = pName;\n\t\tthis.surname = pSurname;\n\t\tthis.age = pAge;\n\t}\n\n\tpublic String getName() {\n\t\treturn name;\n\t}\n\n\tpublic void setName(String name) {\n\t\tthis.name = name;\n\t}\n\n\tpublic String getSurname() {\n\t\treturn surname;\n\t}\n\n\tpublic void setSurname(String surname) {\n\t\tthis.surname = surname;\n\t}\n\n\tpublic Integer getAge() {\n\t\treturn age;\n\t}\n\n\tpublic void setAge(Integer age) {\n\t\tthis.age = age;\n\t}\n\n}\n<\/pre>\n<h2><a name=\"toc700\"><\/a>7. Running the example<\/h2>\n<p>Right click on the project folder and choose Run as -&gt; Run on server choose Tomcat 8 server and click finish.<\/p>\n<h2><a name=\"toc800\"><\/a>8. Results<\/h2>\n<h3><a name=\"toc810\"><\/a>8.1 Welcome view<\/h3>\n<p>This is the start page.&nbsp;Every time you open the application page, this page is shown.<\/p>\n<p><figure id=\"attachment_39532\" aria-describedby=\"caption-attachment-39532\" style=\"width: 373px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2016\/07\/5-Welcome-View.png\"><img decoding=\"async\" class=\"size-full wp-image-39532\" src=\"http:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2016\/07\/5-Welcome-View.png\" alt=\"5 Welcome View\" width=\"373\" height=\"291\" srcset=\"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2016\/07\/5-Welcome-View.png 373w, https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2016\/07\/5-Welcome-View-300x234.png 300w\" sizes=\"(max-width: 373px) 100vw, 373px\" \/><\/a><figcaption id=\"caption-attachment-39532\" class=\"wp-caption-text\">5 Welcome View<\/figcaption><\/figure><\/p>\n<h3><a name=\"toc820\"><\/a>8.2 Input view<\/h3>\n<p>In this page we can add records to our example.&nbsp;Here we validate the fields and then store the data into a container.<\/p>\n<p><figure id=\"attachment_39533\" aria-describedby=\"caption-attachment-39533\" style=\"width: 429px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2016\/07\/6-Input-View.png\"><img decoding=\"async\" class=\"size-full wp-image-39533\" src=\"http:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2016\/07\/6-Input-View.png\" alt=\"6 Input View\" width=\"429\" height=\"455\" srcset=\"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2016\/07\/6-Input-View.png 429w, https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2016\/07\/6-Input-View-283x300.png 283w\" sizes=\"(max-width: 429px) 100vw, 429px\" \/><\/a><figcaption id=\"caption-attachment-39533\" class=\"wp-caption-text\">6 Input View<\/figcaption><\/figure><\/p>\n<h3><a name=\"toc830\"><\/a>8.3 Input view<\/h3>\n<p>In this view, we retrieve all the records from the container and shown them into a table.<\/p>\n<p><figure id=\"attachment_39534\" aria-describedby=\"caption-attachment-39534\" style=\"width: 425px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2016\/07\/7-Data-View.png\"><img decoding=\"async\" class=\"size-full wp-image-39534\" src=\"http:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2016\/07\/7-Data-View.png\" alt=\"7 Data View\" width=\"425\" height=\"386\" srcset=\"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2016\/07\/7-Data-View.png 425w, https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2016\/07\/7-Data-View-300x272.png 300w\" sizes=\"(max-width: 425px) 100vw, 425px\" \/><\/a><figcaption id=\"caption-attachment-39534\" class=\"wp-caption-text\">7 Data View<\/figcaption><\/figure><\/p>\n<h2><a name=\"toc900\"><\/a>9. Download the Source Code<\/h2>\n<p>This was an example of: Vaadin Best Practices.<\/p>\n<div class=\"download\"><strong>Download<\/strong><br \/>\nYou can download the Eclipse project here:&nbsp;<strong><a href=\"http:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2016\/07\/VaadinBestPractices.zip\">VaadinBestPractices<\/a><br \/>\n<\/strong><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Best practices are procedures that are accepted or prescribed as being correct or most effective. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Table Of Contents 1. The tools 2. Introduction 3. Prerequisites 4. Set up the project 5. Coding the example 5.1 Make a design 5.2 Annotations 5.3 Navigator 5.3.1 Layout &amp; content &hellip;<\/p>\n","protected":false},"author":77,"featured_media":33079,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1358],"tags":[1265],"class_list":["post-39526","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-vaadin","tag-vaadin"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Vaadin Best Practices - Java Code Geeks<\/title>\n<meta name=\"description\" content=\"Best practices are procedures that are accepted or prescribed as being correct or most effective. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/examples.javacodegeeks.com\/java-development\/enterprise-java\/vaadin\/vaadin-best-practices\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Vaadin Best Practices - Java Code Geeks\" \/>\n<meta property=\"og:description\" content=\"Best practices are procedures that are accepted or prescribed as being correct or most effective. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/examples.javacodegeeks.com\/java-development\/enterprise-java\/vaadin\/vaadin-best-practices\/\" \/>\n<meta property=\"og:site_name\" content=\"Examples Java Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/javacodegeeks\" \/>\n<meta property=\"article:published_time\" content=\"2016-07-27T08:00:44+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-04-09T09:57:58+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2016\/01\/vaadin-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Jesus Boadas\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@jboadas\" \/>\n<meta name=\"twitter:site\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jesus Boadas\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"17 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/examples.javacodegeeks.com\/java-development\/enterprise-java\/vaadin\/vaadin-best-practices\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/examples.javacodegeeks.com\/java-development\/enterprise-java\/vaadin\/vaadin-best-practices\/\"},\"author\":{\"name\":\"Jesus Boadas\",\"@id\":\"https:\/\/examples.javacodegeeks.com\/#\/schema\/person\/506f9c2b38156c7f94bba77757206dd7\"},\"headline\":\"Vaadin Best Practices\",\"datePublished\":\"2016-07-27T08:00:44+00:00\",\"dateModified\":\"2019-04-09T09:57:58+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/examples.javacodegeeks.com\/java-development\/enterprise-java\/vaadin\/vaadin-best-practices\/\"},\"wordCount\":1599,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/examples.javacodegeeks.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/examples.javacodegeeks.com\/java-development\/enterprise-java\/vaadin\/vaadin-best-practices\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2016\/01\/vaadin-logo.jpg\",\"keywords\":[\"Vaadin\"],\"articleSection\":[\"Vaadin\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/examples.javacodegeeks.com\/java-development\/enterprise-java\/vaadin\/vaadin-best-practices\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/examples.javacodegeeks.com\/java-development\/enterprise-java\/vaadin\/vaadin-best-practices\/\",\"url\":\"https:\/\/examples.javacodegeeks.com\/java-development\/enterprise-java\/vaadin\/vaadin-best-practices\/\",\"name\":\"Vaadin Best Practices - Java Code Geeks\",\"isPartOf\":{\"@id\":\"https:\/\/examples.javacodegeeks.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/examples.javacodegeeks.com\/java-development\/enterprise-java\/vaadin\/vaadin-best-practices\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/examples.javacodegeeks.com\/java-development\/enterprise-java\/vaadin\/vaadin-best-practices\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2016\/01\/vaadin-logo.jpg\",\"datePublished\":\"2016-07-27T08:00:44+00:00\",\"dateModified\":\"2019-04-09T09:57:58+00:00\",\"description\":\"Best practices are procedures that are accepted or prescribed as being correct or most effective. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\",\"breadcrumb\":{\"@id\":\"https:\/\/examples.javacodegeeks.com\/java-development\/enterprise-java\/vaadin\/vaadin-best-practices\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/examples.javacodegeeks.com\/java-development\/enterprise-java\/vaadin\/vaadin-best-practices\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/examples.javacodegeeks.com\/java-development\/enterprise-java\/vaadin\/vaadin-best-practices\/#primaryimage\",\"url\":\"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2016\/01\/vaadin-logo.jpg\",\"contentUrl\":\"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2016\/01\/vaadin-logo.jpg\",\"width\":150,\"height\":150},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/examples.javacodegeeks.com\/java-development\/enterprise-java\/vaadin\/vaadin-best-practices\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/examples.javacodegeeks.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java Development\",\"item\":\"https:\/\/examples.javacodegeeks.com\/category\/java-development\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Enterprise Java\",\"item\":\"https:\/\/examples.javacodegeeks.com\/category\/java-development\/enterprise-java\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Vaadin\",\"item\":\"https:\/\/examples.javacodegeeks.com\/category\/java-development\/enterprise-java\/vaadin\/\"},{\"@type\":\"ListItem\",\"position\":5,\"name\":\"Vaadin Best Practices\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/examples.javacodegeeks.com\/#website\",\"url\":\"https:\/\/examples.javacodegeeks.com\/\",\"name\":\"Java Code Geeks\",\"description\":\"Java Examples and Code Snippets\",\"publisher\":{\"@id\":\"https:\/\/examples.javacodegeeks.com\/#organization\"},\"alternateName\":\"JCG\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/examples.javacodegeeks.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/examples.javacodegeeks.com\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\/\/examples.javacodegeeks.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/examples.javacodegeeks.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png\",\"contentUrl\":\"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\/\/examples.javacodegeeks.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/javacodegeeks\",\"https:\/\/x.com\/javacodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/examples.javacodegeeks.com\/#\/schema\/person\/506f9c2b38156c7f94bba77757206dd7\",\"name\":\"Jesus Boadas\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/examples.javacodegeeks.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2016\/10\/Jesus-Boadas_avatar_1476120926-96x96.jpg\",\"contentUrl\":\"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2016\/10\/Jesus-Boadas_avatar_1476120926-96x96.jpg\",\"caption\":\"Jesus Boadas\"},\"description\":\"I'm a self taught programmer, I began programming back in 1991 using an IBM A10 mainframe with Pascal an Assembler IBM 360\/70 emulator and Turbo C on a X86 PC, since that I work for the banking industry with emerging technologies like Fox Pro, Visual Fox Pro, Visual Basic, Visual C++, Borland C++, lately I moved out to the Airline industry, leading designing and programming in-house web applications with Flex, Actionscript, PHP, Python and Rails and in the last 7 years I focused all my work in Java, working on Linux servers using GlassFish, TomCat, Apache and MySql.\",\"sameAs\":[\"http:\/\/www.javacodegeeks.com\/\",\"https:\/\/ve.linkedin.com\/in\/jesus-boadas\",\"https:\/\/x.com\/jboadas\"],\"url\":\"https:\/\/examples.javacodegeeks.com\/author\/jesus-boadas\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Vaadin Best Practices - Java Code Geeks","description":"Best practices are procedures that are accepted or prescribed as being correct or most effective. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/examples.javacodegeeks.com\/java-development\/enterprise-java\/vaadin\/vaadin-best-practices\/","og_locale":"en_US","og_type":"article","og_title":"Vaadin Best Practices - Java Code Geeks","og_description":"Best practices are procedures that are accepted or prescribed as being correct or most effective. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;","og_url":"https:\/\/examples.javacodegeeks.com\/java-development\/enterprise-java\/vaadin\/vaadin-best-practices\/","og_site_name":"Examples Java Code Geeks","article_publisher":"https:\/\/www.facebook.com\/javacodegeeks","article_published_time":"2016-07-27T08:00:44+00:00","article_modified_time":"2019-04-09T09:57:58+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2016\/01\/vaadin-logo.jpg","type":"image\/jpeg"}],"author":"Jesus Boadas","twitter_card":"summary_large_image","twitter_creator":"@jboadas","twitter_site":"@javacodegeeks","twitter_misc":{"Written by":"Jesus Boadas","Est. reading time":"17 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/examples.javacodegeeks.com\/java-development\/enterprise-java\/vaadin\/vaadin-best-practices\/#article","isPartOf":{"@id":"https:\/\/examples.javacodegeeks.com\/java-development\/enterprise-java\/vaadin\/vaadin-best-practices\/"},"author":{"name":"Jesus Boadas","@id":"https:\/\/examples.javacodegeeks.com\/#\/schema\/person\/506f9c2b38156c7f94bba77757206dd7"},"headline":"Vaadin Best Practices","datePublished":"2016-07-27T08:00:44+00:00","dateModified":"2019-04-09T09:57:58+00:00","mainEntityOfPage":{"@id":"https:\/\/examples.javacodegeeks.com\/java-development\/enterprise-java\/vaadin\/vaadin-best-practices\/"},"wordCount":1599,"commentCount":0,"publisher":{"@id":"https:\/\/examples.javacodegeeks.com\/#organization"},"image":{"@id":"https:\/\/examples.javacodegeeks.com\/java-development\/enterprise-java\/vaadin\/vaadin-best-practices\/#primaryimage"},"thumbnailUrl":"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2016\/01\/vaadin-logo.jpg","keywords":["Vaadin"],"articleSection":["Vaadin"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/examples.javacodegeeks.com\/java-development\/enterprise-java\/vaadin\/vaadin-best-practices\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/examples.javacodegeeks.com\/java-development\/enterprise-java\/vaadin\/vaadin-best-practices\/","url":"https:\/\/examples.javacodegeeks.com\/java-development\/enterprise-java\/vaadin\/vaadin-best-practices\/","name":"Vaadin Best Practices - Java Code Geeks","isPartOf":{"@id":"https:\/\/examples.javacodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/examples.javacodegeeks.com\/java-development\/enterprise-java\/vaadin\/vaadin-best-practices\/#primaryimage"},"image":{"@id":"https:\/\/examples.javacodegeeks.com\/java-development\/enterprise-java\/vaadin\/vaadin-best-practices\/#primaryimage"},"thumbnailUrl":"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2016\/01\/vaadin-logo.jpg","datePublished":"2016-07-27T08:00:44+00:00","dateModified":"2019-04-09T09:57:58+00:00","description":"Best practices are procedures that are accepted or prescribed as being correct or most effective. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;","breadcrumb":{"@id":"https:\/\/examples.javacodegeeks.com\/java-development\/enterprise-java\/vaadin\/vaadin-best-practices\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/examples.javacodegeeks.com\/java-development\/enterprise-java\/vaadin\/vaadin-best-practices\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/examples.javacodegeeks.com\/java-development\/enterprise-java\/vaadin\/vaadin-best-practices\/#primaryimage","url":"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2016\/01\/vaadin-logo.jpg","contentUrl":"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2016\/01\/vaadin-logo.jpg","width":150,"height":150},{"@type":"BreadcrumbList","@id":"https:\/\/examples.javacodegeeks.com\/java-development\/enterprise-java\/vaadin\/vaadin-best-practices\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/examples.javacodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"Java Development","item":"https:\/\/examples.javacodegeeks.com\/category\/java-development\/"},{"@type":"ListItem","position":3,"name":"Enterprise Java","item":"https:\/\/examples.javacodegeeks.com\/category\/java-development\/enterprise-java\/"},{"@type":"ListItem","position":4,"name":"Vaadin","item":"https:\/\/examples.javacodegeeks.com\/category\/java-development\/enterprise-java\/vaadin\/"},{"@type":"ListItem","position":5,"name":"Vaadin Best Practices"}]},{"@type":"WebSite","@id":"https:\/\/examples.javacodegeeks.com\/#website","url":"https:\/\/examples.javacodegeeks.com\/","name":"Java Code Geeks","description":"Java Examples and Code Snippets","publisher":{"@id":"https:\/\/examples.javacodegeeks.com\/#organization"},"alternateName":"JCG","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/examples.javacodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/examples.javacodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/examples.javacodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/examples.javacodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/examples.javacodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/javacodegeeks","https:\/\/x.com\/javacodegeeks"]},{"@type":"Person","@id":"https:\/\/examples.javacodegeeks.com\/#\/schema\/person\/506f9c2b38156c7f94bba77757206dd7","name":"Jesus Boadas","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/examples.javacodegeeks.com\/#\/schema\/person\/image\/","url":"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2016\/10\/Jesus-Boadas_avatar_1476120926-96x96.jpg","contentUrl":"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2016\/10\/Jesus-Boadas_avatar_1476120926-96x96.jpg","caption":"Jesus Boadas"},"description":"I'm a self taught programmer, I began programming back in 1991 using an IBM A10 mainframe with Pascal an Assembler IBM 360\/70 emulator and Turbo C on a X86 PC, since that I work for the banking industry with emerging technologies like Fox Pro, Visual Fox Pro, Visual Basic, Visual C++, Borland C++, lately I moved out to the Airline industry, leading designing and programming in-house web applications with Flex, Actionscript, PHP, Python and Rails and in the last 7 years I focused all my work in Java, working on Linux servers using GlassFish, TomCat, Apache and MySql.","sameAs":["http:\/\/www.javacodegeeks.com\/","https:\/\/ve.linkedin.com\/in\/jesus-boadas","https:\/\/x.com\/jboadas"],"url":"https:\/\/examples.javacodegeeks.com\/author\/jesus-boadas\/"}]}},"_links":{"self":[{"href":"https:\/\/examples.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/39526","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/examples.javacodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/examples.javacodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/examples.javacodegeeks.com\/wp-json\/wp\/v2\/users\/77"}],"replies":[{"embeddable":true,"href":"https:\/\/examples.javacodegeeks.com\/wp-json\/wp\/v2\/comments?post=39526"}],"version-history":[{"count":0,"href":"https:\/\/examples.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/39526\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/examples.javacodegeeks.com\/wp-json\/wp\/v2\/media\/33079"}],"wp:attachment":[{"href":"https:\/\/examples.javacodegeeks.com\/wp-json\/wp\/v2\/media?parent=39526"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/examples.javacodegeeks.com\/wp-json\/wp\/v2\/categories?post=39526"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/examples.javacodegeeks.com\/wp-json\/wp\/v2\/tags?post=39526"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}