<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Christoph Frick - ofnir.net - Open Source Consultant, Software Developer and System Administrator (Posts about Vaadin)</title><link>https://ofnir.net/</link><description></description><atom:link href="https://ofnir.net/categories/vaadin.xml" rel="self" type="application/rss+xml"></atom:link><language>en</language><copyright>Contents © 2025 &lt;a href="mailto:cf@ofnir.net"&gt;Christoph Frick - ofnir.net&lt;/a&gt; </copyright><lastBuildDate>Sat, 13 Dec 2025 14:20:05 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>I am a Certified Vaadin 24 Developer now</title><link>https://ofnir.net/posts/i-am-a-certified-vaadin-24-developer-now/</link><dc:creator>Christoph Frick - ofnir.net</dc:creator><description>&lt;p&gt;What the title says :)&lt;/p&gt;</description><category>Certification</category><category>Vaadin</category><guid>https://ofnir.net/posts/i-am-a-certified-vaadin-24-developer-now/</guid><pubDate>Tue, 05 Dec 2023 23:00:00 GMT</pubDate></item><item><title>Using Groovy for Vaadin Hilla endpoints</title><link>https://ofnir.net/posts/using-groovy-for-vaadin-hilla-endpoints/</link><dc:creator>Christoph Frick - ofnir.net</dc:creator><description>&lt;p&gt;Since version 2 &lt;a href="https://hilla.dev/"&gt;Vaadin Hilla&lt;/a&gt; no longer needs
endpoints to be &lt;code&gt;.java&lt;/code&gt; files to be parsed.  Now the endpoints are determined 
by analyzing the generated classes.  So in theory any JVM language can
be used now for endpoints - as long as the result comes close enough to
what the Java compiler would produce.&lt;/p&gt;
&lt;p&gt;For Groovy this means to annotate the &lt;code&gt;@dev.hilla.Enpoint&lt;/code&gt; classes with
&lt;code&gt;@groovy.transform.stc.POJO&lt;/code&gt; and &lt;code&gt;@groovy.transform.CompileStatic&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;@CompileStatic&lt;/code&gt; is no stranger, but &lt;code&gt;@POJO&lt;/code&gt; is new since Groovy 4.0;
both combined will result in byte-code, that is very close to what the
Java compiler would produce from a similar &lt;code&gt;.java&lt;/code&gt; file.  Yet you are
still able to use Groovy code and annotations.&lt;/p&gt;
&lt;p&gt;Complete example:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;example&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;application&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;helloworld&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;com.vaadin.flow.server.auth.AnonymousAllowed&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;dev.hilla.Endpoint&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;jakarta.annotation.Nonnull&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;jakarta.validation.constraints.NotEmpty&lt;/span&gt;

&lt;span class="nd"&gt;@Endpoint&lt;/span&gt;
&lt;span class="nd"&gt;@AnonymousAllowed&lt;/span&gt;
&lt;span class="nd"&gt;@groovy.transform.stc.POJO&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;// XXX&lt;/span&gt;
&lt;span class="nd"&gt;@groovy.transform.CompileStatic&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// XXX&lt;/span&gt;
&lt;span class="kd"&gt;class&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;HelloWorldEndpoint&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;final&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;HelloWorldService&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;helloWorldService&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;HelloWorldEndpoint&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;HelloWorldService&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;helloWorldService&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;helloWorldService&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;helloWorldService&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nd"&gt;@Nonnull&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sayHello&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nd"&gt;@NotEmpty&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;helloWorldService&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;sayHello&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;</description><category>Groovy</category><category>Hilla</category><category>Vaadin</category><guid>https://ofnir.net/posts/using-groovy-for-vaadin-hilla-endpoints/</guid><pubDate>Sun, 02 Jul 2023 22:00:00 GMT</pubDate></item><item><title>Vaadin Flow cheat sheets and flow diagrams</title><link>https://ofnir.net/posts/vaadin-flow-cheat-sheets-and-flow-diagrams/</link><dc:creator>Christoph Frick - ofnir.net</dc:creator><description>&lt;p&gt;Started a project to put together the more intricate correlations that
make the &lt;a href="https://vaadin.com/flow"&gt;Vaadin Flow&lt;/a&gt; framework tick.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/christoph-frick/vaadin-flow-cheatsheets"&gt;Vaadin Flow Cheat sheets and flow diagrams&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;First one is the navigation life cycle:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://ofnir.net/galleries/vaadin-flow-cheat-sheets/navigation-life-cycle.png"&gt;&lt;img alt="Vaadin Flow navigation life cycle" src="https://ofnir.net/galleries/vaadin-flow-cheat-sheets/navigation-life-cycle.png"&gt;&lt;/a&gt;&lt;/p&gt;</description><category>Vaadin</category><category>Vaadin Flow</category><guid>https://ofnir.net/posts/vaadin-flow-cheat-sheets-and-flow-diagrams/</guid><pubDate>Mon, 11 Apr 2022 22:00:00 GMT</pubDate></item><item><title>I am a Certified Vaadin 14 Professional now</title><link>https://ofnir.net/posts/i-am-a-certified-vaadin-14-professional-now/</link><dc:creator>Christoph Frick - ofnir.net</dc:creator><description>&lt;p&gt;What the title says :)&lt;/p&gt;</description><category>Certification</category><category>Vaadin</category><guid>https://ofnir.net/posts/i-am-a-certified-vaadin-14-professional-now/</guid><pubDate>Wed, 29 Apr 2020 22:00:00 GMT</pubDate></item><item><title>I am a Certified Vaadin 14 Developer now</title><link>https://ofnir.net/posts/i-am-a-certified-vaadin-14-developer-now/</link><dc:creator>Christoph Frick - ofnir.net</dc:creator><description>&lt;p&gt;What the title says :)&lt;/p&gt;</description><category>Certification</category><category>Vaadin</category><guid>https://ofnir.net/posts/i-am-a-certified-vaadin-14-developer-now/</guid><pubDate>Tue, 24 Mar 2020 23:00:00 GMT</pubDate></item><item><title>I am a Certified Vaadin 8 Developer and Professional now</title><link>https://ofnir.net/posts/i-am-a-certified-vaadin-8-developer-and-professional-now/</link><dc:creator>Christoph Frick - ofnir.net</dc:creator><description>&lt;p&gt;What the title says :)&lt;/p&gt;</description><category>Certification</category><category>Vaadin</category><guid>https://ofnir.net/posts/i-am-a-certified-vaadin-8-developer-and-professional-now/</guid><pubDate>Mon, 04 Sep 2017 22:00:00 GMT</pubDate></item><item><title>Generic Vaadin8 field for converted values</title><link>https://ofnir.net/posts/generic-vaadin8-field-for-converted-values/</link><dc:creator>Christoph Frick - ofnir.net</dc:creator><description>&lt;p&gt;In Vaadin8 the conversion between the model data type and the field is done in the &lt;code class="docutils literal"&gt;Binder&lt;/code&gt;.  This prevents automatic mapping for the models as some manual step must be done beforehand.  But since writing custom fields now is way more reasonable, here is a first draft for a generic converter field. Just provide the backing &lt;code class="docutils literal"&gt;Field&lt;/code&gt; and an &lt;code class="docutils literal"&gt;Converter&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://gist.github.com/christoph-frick/947fec59cfd09f7140933b52102cc041"&gt;https://gist.github.com/christoph-frick/947fec59cfd09f7140933b52102cc041&lt;/a&gt;&lt;/p&gt;</description><category>Vaadin</category><category>Vaadin8</category><guid>https://ofnir.net/posts/generic-vaadin8-field-for-converted-values/</guid><pubDate>Mon, 24 Apr 2017 22:00:00 GMT</pubDate></item><item><title>Null representation needed when using converters in Vaadin 8 binder</title><link>https://ofnir.net/posts/null-representation-needed-when-using-converters-in-vaadin-8-binder/</link><dc:creator>Christoph Frick - ofnir.net</dc:creator><description>&lt;p&gt;&lt;code class="docutils literal"&gt;TextFields&lt;/code&gt; in Vaadin8 are no longer allowed to get a &lt;code class="docutils literal"&gt;null&lt;/code&gt; set as
value.  This usually is no problem unless we use a &lt;code class="docutils literal"&gt;Converter&lt;/code&gt; for the
field binding.  In that case a &lt;code class="docutils literal"&gt;null&lt;/code&gt; value about to be bound will
raise an assertion error.  It also won't help if that field is bound
with &lt;code class="docutils literal"&gt;asRequired&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The solution in this case is to use &lt;code class="docutils literal"&gt;withNullRepresentation&lt;/code&gt; before
adding the &lt;code class="docutils literal"&gt;Converter&lt;/code&gt; in the binding builder.  This adds another
converter at first, that turns &lt;code class="docutils literal"&gt;null&lt;/code&gt; values into "something" so the
real converter has to actually work.&lt;/p&gt;
&lt;p&gt;See&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://github.com/christoph-frick/try-vaadin8/commit/8eee2ce6880b7a3dd4ce1526cf533ef356d3ec50"&gt;https://github.com/christoph-frick/try-vaadin8/commit/8eee2ce6880b7a3dd4ce1526cf533ef356d3ec50&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;and&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://github.com/vaadin/framework/issues/8725"&gt;https://github.com/vaadin/framework/issues/8725&lt;/a&gt;&lt;/p&gt;</description><category>Vaadin</category><category>Vaadin8</category><guid>https://ofnir.net/posts/null-representation-needed-when-using-converters-in-vaadin-8-binder/</guid><pubDate>Thu, 02 Mar 2017 23:00:00 GMT</pubDate></item><item><title>Trying out Vaadin 8</title><link>https://ofnir.net/posts/trying-out-vaadin-8/</link><dc:creator>Christoph Frick - ofnir.net</dc:creator><description>&lt;p&gt;Started a repo to try out the new/changed stuff from Vaadin 8.  Lessons learned so far:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Immediate&lt;/em&gt; on fields is gone.  They are now immediate by default.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Converter&lt;/em&gt; on fields is gone.  You convert either in the &lt;code class="docutils literal"&gt;Binder&lt;/code&gt; or you have to write your own field.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use the &lt;code class="docutils literal"&gt;Binder&lt;/code&gt; builder as a builder (chain your calls) -- even if your e.g. Groovy gives you &lt;em&gt;builderish&lt;/em&gt; behaviour with &lt;code class="docutils literal"&gt;with&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal"&gt;CallbackDataProvider&lt;/code&gt; is basically the same as the &lt;code class="docutils literal"&gt;LazyContainer&lt;/code&gt; from &lt;em&gt;Viritin&lt;/em&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Creating your own &lt;code class="docutils literal"&gt;CustomField&lt;/code&gt; becomes easier, since you get some proper guidance on what to implement.  Yet making that field properly propagate change events is still on you.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For a composite field it's easiest to build it up using again a &lt;code class="docutils literal"&gt;Binder&lt;/code&gt; and delegate &lt;code class="docutils literal"&gt;addValueChangeListener&lt;/code&gt; down to it.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The repository is here: &lt;a class="reference external" href="https://github.com/christoph-frick/try-vaadin8"&gt;https://github.com/christoph-frick/try-vaadin8&lt;/a&gt;&lt;/p&gt;</description><category>Vaadin</category><category>Vaadin8</category><guid>https://ofnir.net/posts/trying-out-vaadin-8/</guid><pubDate>Thu, 16 Feb 2017 23:00:00 GMT</pubDate></item><item><title>Updated Vaadin starter to official Spring plugin</title><link>https://ofnir.net/posts/updated-vaadin-starter-to-official-spring-plugin/</link><dc:creator>Christoph Frick - ofnir.net</dc:creator><description>&lt;p&gt;Finally came around to update the &lt;a class="reference external" href="https://github.com/christoph-frick/springboot-groovy-vaadin-starter"&gt;Spring-Boot Groovy Vaadin Starter&lt;/a&gt; to the
official Spring plugin.  The only major difference now is the handling of the
widgetset via annotation instead of configuration.&lt;/p&gt;
&lt;p&gt;Also the "close-to-tweetable" example got an update.&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code groovy"&gt;&lt;a id="rest_code_cc58633b348e4a6a9b6ad04d97a7cce5-1" name="rest_code_cc58633b348e4a6a9b6ad04d97a7cce5-1" href="https://ofnir.net/posts/updated-vaadin-starter-to-official-spring-plugin/#rest_code_cc58633b348e4a6a9b6ad04d97a7cce5-1"&gt;&lt;/a&gt;&lt;span class="c1"&gt;// run with `spring run vaadin.groovy`&lt;/span&gt;
&lt;a id="rest_code_cc58633b348e4a6a9b6ad04d97a7cce5-2" name="rest_code_cc58633b348e4a6a9b6ad04d97a7cce5-2" href="https://ofnir.net/posts/updated-vaadin-starter-to-official-spring-plugin/#rest_code_cc58633b348e4a6a9b6ad04d97a7cce5-2"&gt;&lt;/a&gt;&lt;span class="nd"&gt;@Grapes&lt;/span&gt;&lt;span class="o"&gt;([&lt;/span&gt;
&lt;a id="rest_code_cc58633b348e4a6a9b6ad04d97a7cce5-3" name="rest_code_cc58633b348e4a6a9b6ad04d97a7cce5-3" href="https://ofnir.net/posts/updated-vaadin-starter-to-official-spring-plugin/#rest_code_cc58633b348e4a6a9b6ad04d97a7cce5-3"&gt;&lt;/a&gt;&lt;span class="nd"&gt;@Grab&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'com.vaadin:vaadin-spring-boot-starter:1.0.0'&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt;
&lt;a id="rest_code_cc58633b348e4a6a9b6ad04d97a7cce5-4" name="rest_code_cc58633b348e4a6a9b6ad04d97a7cce5-4" href="https://ofnir.net/posts/updated-vaadin-starter-to-official-spring-plugin/#rest_code_cc58633b348e4a6a9b6ad04d97a7cce5-4"&gt;&lt;/a&gt;&lt;span class="nd"&gt;@Grab&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'com.vaadin:vaadin-archetype-application:7.6.8'&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt;
&lt;a id="rest_code_cc58633b348e4a6a9b6ad04d97a7cce5-5" name="rest_code_cc58633b348e4a6a9b6ad04d97a7cce5-5" href="https://ofnir.net/posts/updated-vaadin-starter-to-official-spring-plugin/#rest_code_cc58633b348e4a6a9b6ad04d97a7cce5-5"&gt;&lt;/a&gt;&lt;span class="o"&gt;])&lt;/span&gt;
&lt;a id="rest_code_cc58633b348e4a6a9b6ad04d97a7cce5-6" name="rest_code_cc58633b348e4a6a9b6ad04d97a7cce5-6" href="https://ofnir.net/posts/updated-vaadin-starter-to-official-spring-plugin/#rest_code_cc58633b348e4a6a9b6ad04d97a7cce5-6"&gt;&lt;/a&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;com.vaadin.ui.*&lt;/span&gt;
&lt;a id="rest_code_cc58633b348e4a6a9b6ad04d97a7cce5-7" name="rest_code_cc58633b348e4a6a9b6ad04d97a7cce5-7" href="https://ofnir.net/posts/updated-vaadin-starter-to-official-spring-plugin/#rest_code_cc58633b348e4a6a9b6ad04d97a7cce5-7"&gt;&lt;/a&gt;
&lt;a id="rest_code_cc58633b348e4a6a9b6ad04d97a7cce5-8" name="rest_code_cc58633b348e4a6a9b6ad04d97a7cce5-8" href="https://ofnir.net/posts/updated-vaadin-starter-to-official-spring-plugin/#rest_code_cc58633b348e4a6a9b6ad04d97a7cce5-8"&gt;&lt;/a&gt;&lt;span class="nd"&gt;@com.vaadin.spring.annotation.SpringUI&lt;/span&gt;
&lt;a id="rest_code_cc58633b348e4a6a9b6ad04d97a7cce5-9" name="rest_code_cc58633b348e4a6a9b6ad04d97a7cce5-9" href="https://ofnir.net/posts/updated-vaadin-starter-to-official-spring-plugin/#rest_code_cc58633b348e4a6a9b6ad04d97a7cce5-9"&gt;&lt;/a&gt;&lt;span class="nd"&gt;@com.vaadin.annotations.Theme&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"valo"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;a id="rest_code_cc58633b348e4a6a9b6ad04d97a7cce5-10" name="rest_code_cc58633b348e4a6a9b6ad04d97a7cce5-10" href="https://ofnir.net/posts/updated-vaadin-starter-to-official-spring-plugin/#rest_code_cc58633b348e4a6a9b6ad04d97a7cce5-10"&gt;&lt;/a&gt;&lt;span class="kd"&gt;class&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;MyUI&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;extends&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;UI&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;a id="rest_code_cc58633b348e4a6a9b6ad04d97a7cce5-11" name="rest_code_cc58633b348e4a6a9b6ad04d97a7cce5-11" href="https://ofnir.net/posts/updated-vaadin-starter-to-official-spring-plugin/#rest_code_cc58633b348e4a6a9b6ad04d97a7cce5-11"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kd"&gt;protected&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;init&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;vaadin&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;server&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;VaadinRequest&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;a id="rest_code_cc58633b348e4a6a9b6ad04d97a7cce5-12" name="rest_code_cc58633b348e4a6a9b6ad04d97a7cce5-12" href="https://ofnir.net/posts/updated-vaadin-starter-to-official-spring-plugin/#rest_code_cc58633b348e4a6a9b6ad04d97a7cce5-12"&gt;&lt;/a&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;setContent&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Label&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Hello World!"&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt;
&lt;a id="rest_code_cc58633b348e4a6a9b6ad04d97a7cce5-13" name="rest_code_cc58633b348e4a6a9b6ad04d97a7cce5-13" href="https://ofnir.net/posts/updated-vaadin-starter-to-official-spring-plugin/#rest_code_cc58633b348e4a6a9b6ad04d97a7cce5-13"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;a id="rest_code_cc58633b348e4a6a9b6ad04d97a7cce5-14" name="rest_code_cc58633b348e4a6a9b6ad04d97a7cce5-14" href="https://ofnir.net/posts/updated-vaadin-starter-to-official-spring-plugin/#rest_code_cc58633b348e4a6a9b6ad04d97a7cce5-14"&gt;&lt;/a&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;</description><category>Groovy</category><category>Spring</category><category>Vaadin</category><guid>https://ofnir.net/posts/updated-vaadin-starter-to-official-spring-plugin/</guid><pubDate>Mon, 15 Aug 2016 22:00:00 GMT</pubDate></item></channel></rss>