diff options
Diffstat (limited to 'documentation/getting-started/getting-started-scala.asciidoc')
-rw-r--r-- | documentation/getting-started/getting-started-scala.asciidoc | 113 |
1 files changed, 0 insertions, 113 deletions
diff --git a/documentation/getting-started/getting-started-scala.asciidoc b/documentation/getting-started/getting-started-scala.asciidoc deleted file mode 100644 index 1da94d0853..0000000000 --- a/documentation/getting-started/getting-started-scala.asciidoc +++ /dev/null @@ -1,113 +0,0 @@ ---- -title: Using Vaadin with Scala -order: 10 -layout: page ---- - -[[getting-started.scala]] -= Using Vaadin with Scala - -You can use Vaadin with any JVM compatible language, such as Scala or Groovy. -There are, however, some caveats related to libraries and project set-up. In the -following, we give instructions for creating a Scala UI in Eclipse, with the -Scala IDE for Eclipse and the Vaadin Plugin for Eclipse. - -. Install the link:http://scala-ide.org/[Scala IDE for Eclipse], either from an -Eclipse update site or as a bundled Eclipse distribution. - -. Open an existing Vaadin Java project or create a new one as outlined in -<<dummy/../../../framework/getting-started/getting-started-first-project#getting-started.first-project,"Creating -and Running a Project with Eclipse">>. You can delete the UI class created by -the wizard. - -. Switch to the Scala perspective by clicking the perspective in the upper-right -corner of the Eclipse window. - -. Right-click on the project folder in [guilabel]#Project Explorer# and select -"Configure > Add Scala Nature". - -. The web application needs [filename]#scala-library.jar# in its class path. If -using Scala IDE, you can copy it from somewhere under your Eclipse installation -to the class path of the web application, that is, either to the -[filename]#WebContent/WEB-INF/lib# folder in the project or to the library path -of the application server. If copying outside Eclipse to a project, refresh the -project by selecting it and pressing F5. - -+ -You could also get it with an Ivy or Maven dependency, just make sure that the -version is same as what the Scala IDE uses. - - -You should now be able to create a Scala UI class, such as the following: - - -[source, scala] ----- -@Theme("mytheme") -class MyScalaUI extends UI { - override def init(request: VaadinRequest) = { - val content: VerticalLayout = new VerticalLayout - setContent(content) - - val label: Label = new Label("Hello, world!") - content addComponent label - - // Handle user interaction - content addComponent new Button("Click Me!", - new ClickListener { - override def buttonClick(event: ClickEvent) = - Notification.show("The time is " + new Date) - }) - } -} ----- - -Eclipse and Scala IDE should be able to import the Vaadin classes automatically -when you press CtrlShiftO. - -You need to define the Scala UI class either in a servlet class (in Servlet 3.0 -project) or in a [filename]#web.xml# deployment descriptor, just like described -in -<<dummy/../../../framework/getting-started/getting-started-first-project#getting-started.first-project.exploring,"Exploring -the Project">> for Java UIs. - -ifdef::web[] -The link:https://github.com/henrikerola/scaladin[Scaladin add-on] offers a more -Scala-like API for Vaadin. A Vaadin 7 compatible version is under development. -endif::web[] - -ifdef::web[] -[[getting-started.scala.lambdas]] -== Defining Listeners with Lambda Expressions - -Scala does not support use of lambda expressions for calling functional -interfaces, like Java 8 does. Hence, we can't just use a lambda expression for -the [interfacename]#ClickListener# in the example above. You can, however, -define implicit conversions from lambda expressions to such interface -implementations. For example, for click listeners: - - -[source, scala] ----- -implicit def clickListener(f: ClickEvent => Unit) = - new ClickListener { - override def buttonClick(event: ClickEvent) { - f(event) - } - } ----- - -You could then use a lambda expression as follows: - - -[source, scala] ----- -content addComponent new Button("Click Me!", - (event: ClickEvent) => - Notification.show("The time is " + new Date)) ----- - -endif::web[] - - - |