Loïc Guillois
Loïc Guillois

Reputation: 373

Play! 2.1 want me to write scala code

I hope it's the last errors I will encounter migrating to Play! 2.1.

All my controllers returns throw an error using compile command.

return ok(createOrUpdate.render(Secured.getConnectedUser(), getCustomers(), User.build(user)));

[error]   required: User,scala.collection.immutable.List<User>,User
[error]   found: User,java.util.List<User>,<null>

I don't understand why play! 2.1 want me to use scala api instead of java api.

Here is my build.scala file :

import sbt._
import Keys._
import PlayProject._

object ApplicationBuild extends Build {

    val appName         = "webapp-stativiz"
    val appVersion      = "1.0-SNAPSHOT"

    val appDependencies = Seq(
      javaCore,
      javaJdbc,
      javaEbean,
      "org.mongodb" % "mongo-java-driver" % "2.10.1",
      "pdf" % "pdf_2.9.1" % "0.3",
      "commons-io" % "commons-io" % "1.3.2",
      "commons-codec" % "commons-codec" % "1.7"
    )

    val main = play.Project(appName, appVersion, appDependencies, mainLang = JAVA).settings(
          resolvers += Resolver.url("My GitHub Play Repository", url("http://www.joergviola.de/releases/"))(Resolver.ivyStylePatterns) 
    )

}

EDIT :

Using run command I have this exception :

sbt.PlayExceptions$CompilationException: Compilation error[error: method render in class createOrUpdate cannot be applied to given types;]
        at sbt.PlayReloader$$anon$2$$anonfun$reload$2$$anonfun$apply$15$$anonfun$apply$16.apply(PlayReloader.scala:349) ~[na:na]
        at sbt.PlayReloader$$anon$2$$anonfun$reload$2$$anonfun$apply$15$$anonfun$apply$16.apply(PlayReloader.scala:349) ~[na:na]
        at scala.Option.map(Option.scala:133) ~[scala-library.jar:na]
        at sbt.PlayReloader$$anon$2$$anonfun$reload$2$$anonfun$apply$15.apply(PlayReloader.scala:349) ~[na:na]
        at sbt.PlayReloader$$anon$2$$anonfun$reload$2$$anonfun$apply$15.apply(PlayReloader.scala:346) ~[na:na]
        at scala.Option.map(Option.scala:133) ~[scala-library.jar:na]

SOLUTION :

Delete your project. Create a new one.

Upvotes: 0

Views: 890

Answers (3)

Lo&#239;c Guillois
Lo&#239;c Guillois

Reputation: 373

The solution is :

  1. Create a new project
  2. Put your files inside (app, public... folders)
  3. Delete your old project

So... is that called a migration ? Play! 2.1 is worst release I've seen :(

Upvotes: 0

JasonG
JasonG

Reputation: 5962

scala should handle the type conversion from java list to scala list. So I think you may be looking at the list type instead of the null where expects type user. Is the last field in the below statement returning null?

return ok(createOrUpdate.render(Secured.getConnectedUser(), getCustomers(), User.build(user)));

[error]   required: User,scala.collection.immutable.List<User>,User
[error]   found: User,java.util.List<User>,<null>

Upvotes: 1

Alban Dericbourg
Alban Dericbourg

Reputation: 1636

mainLang = JAVA is no longer required in Play! 2.1: the dependencies java* are enough for Play! to identify your main application language.

The rest of your file seems correct. Try run play clean clean-all compile to make it work.

Upvotes: 1

Related Questions