Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Playframework-子包控制器和路由问题_Java_Scala_Intellij Idea_Playframework_Sbt - Fatal编程技术网

Java Playframework-子包控制器和路由问题

Java Playframework-子包控制器和路由问题,java,scala,intellij-idea,playframework,sbt,Java,Scala,Intellij Idea,Playframework,Sbt,系统详细信息: app/ controllers/ (provided) filters/ (provided) models/ services/ (provided) views/ (provided) Arch-Linux:4.11.7-1-Arch-x64 Oracle Java JDK:1.8.0131 IntelliJ Scala插件:2017.1.19(最新版本) SBT:0.13.13(最新版本) Intelli

系统详细信息:

app/
      controllers/ (provided)
      filters/ (provided)
      models/ 
      services/ (provided)
      views/  (provided)
  • Arch-Linux:4.11.7-1-Arch-x64
  • Oracle Java JDK:1.8.0131
  • IntelliJ Scala插件:2017.1.19(最新版本)
  • SBT:0.13.13(最新版本)
  • IntelliJ IDEA Ultimate 2017.1.4
  • 播放框架:2.6.1
简介

注意:我是新来玩框架的

我正在使用提供的“PlayStarter”项目,通过这个项目,我创建了一个可以路由到各个页面的控制器。这是通过不使用子包实现的

目录结构:
{root}/app/controllers/MyController

MyController.index()
与路由路径一起显示:

GET     /                        controllers.MyController.index
这与预期一样显示,我创建的
POST
方法也按预期运行


问题:

app/
      controllers/ (provided)
      filters/ (provided)
      models/ 
      services/ (provided)
      views/  (provided)
我试图创建子包来启动我的项目,但每次都会收到错误(详情如下)

浏览网页(对我来说)没有找到解决办法。我搜索了类似的问题,发现是一个非常相似的问题,但答案并不能解决我的问题

A似乎解决了这个问题,我尝试了,但没有成功

错误输出:

/usr/lib/jvm/java-8-jdk/bin/java -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:37417,suspend=y,server=n -Xms512M -Xmx1024M -Xss1M -XX:+CMSClassUnloadingEnabled -Dfile.encoding=UTF-8 -classpath /home/cybex/.IntelliJIdea2017.1/config/plugins/Scala/launcher/sbt-launch.jar:/usr/share/intellij-idea-ultimate-edition/lib/idea_rt.jar xsbt.boot.Boot run
Connected to the target VM, address: '127.0.0.1:37417', transport: 'socket'
[info] Loading global plugins from /home/cybex/.sbt/0.13/plugins
[info] Loading project definition from /home/cybex/Documents/play-project/eatalot/project
[info] Set current project to EatAloT (in build file:/home/cybex/Documents/University/Year%205/WRR301/eatalot/eatalot/)

--- (Running the application, auto-reloading is enabled) ---

[info] p.c.s.AkkaHttpServer - Listening for HTTP on /0:0:0:0:0:0:0:0:8080

(Server started, use Enter to stop and go back to the console...)

[info] Compiling 35 Scala sources and 13 Java sources to /home/cybex/Documents/play-project/eatalot/target/scala-2.12/classes...
[error] /home/cybex/Documents/play-project/eatalot/conf/routes:8: type AccountController is not a member of package controllers.User.routes
[error] GET        /user                 controllers.User.routes.AccountController.index()
[error] /home/cybex/Documents/play-project/eatalot/conf/routes:8: type AccountController is not a member of package controllers.User.routes
[error] GET        /user                 controllers.User.routes.AccountController.index()
[error] /home/cybex/Documents/play-project/eatalot/conf/routes:8: type AccountController is not a member of package controllers.User.routes
[error] GET        /user                 controllers.User.routes.AccountController.index()
[error] /home/cybex/Documents/play-project/eatalot/app/views/User/Account/index.scala.html:28: object AccountController is not a member of package controllers.User.routes
[error]         <form action="@controllers.User.routes.AccountController.login()" method="get">
[error]                                                ^
[error] /home/cybex/Documents/play-project/eatalot/app/views/User/Account/index.scala.html:32: object AccountController is not a member of package controllers.User.routes
[error]         <form action="@controllers.User.routes.AccountController.register()" method="get">
[error]                                                ^
[error] /home/cybex/Documents/play-project/eatalot/app/views/User/Account/login.scala.html:17: object AccountController is not a member of package controllers.User.routes
[error]         <form action="@controllers.User.routes.AccountController.doLogin()" method="post">
[error]                                                ^
[error] /home/cybex/Documents/play-project/eatalot/app/views/User/Account/register.scala.html:16: object AccountController is not a member of package controllers.User.routes
[error]         <form method="post" action="@controllers.User.routes.AccountController.doRegister()">
[error]                                                              ^
[error] 7 errors found
[error] (compile:compileIncremental) Compilation failed
[info] Compiling 35 Scala sources and 13 Java sources to /home/cybex/Documents/play-project/eatalot/target/scala-2.12/classes...
[error] /home/cybex/Documents/play-project/eatalot/conf/routes:8: type AccountController is not a member of package controllers.User.routes
[error] GET        /user                 controllers.User.routes.AccountController.index()
[error] /home/cybex/Documents/play-project/eatalot/conf/routes:8: type AccountController is not a member of package controllers.User.routes
[error] GET        /user                 controllers.User.routes.AccountController.index()
[error] /home/cybex/Documents/play-project/eatalot/conf/routes:8: type AccountController is not a member of package controllers.User.routes
[error] GET        /user                 controllers.User.routes.AccountController.index()
[error] /home/cybex/Documents/play-project/eatalot/app/views/User/Account/index.scala.html:28: object AccountController is not a member of package controllers.User.routes
[error]         <form action="@controllers.User.routes.AccountController.login()" method="get">
[error]                                                ^
[error] /home/cybex/Documents/play-project/eatalot/app/views/User/Account/index.scala.html:32: object AccountController is not a member of package controllers.User.routes
[error]         <form action="@controllers.User.routes.AccountController.register()" method="get">
[error]                                                ^
[error] /home/cybex/Documents/play-project/eatalot/app/views/User/Account/login.scala.html:17: object AccountController is not a member of package controllers.User.routes
[error]         <form action="@controllers.User.routes.AccountController.doLogin()" method="post">
[error]                                                ^
[error] /home/cybex/Documents/play-project/eatalot/app/views/User/Account/register.scala.html:16: object AccountController is not a member of package controllers.User.routes
[error]         <form method="post" action="@controllers.User.routes.AccountController.doRegister()">
[error]                                                              ^
[error] 7 errors found
[error] (compile:compileIncremental) Compilation failed
[error] application - 

! @74j57k5c0 - Internal server error, for (GET) [/] ->

play.sbt.PlayExceptions$CompilationException: Compilation error[type AccountController is not a member of package controllers.User.routes]
    at play.sbt.PlayExceptions$CompilationException$.apply(PlayExceptions.scala:27)
    at play.sbt.PlayExceptions$CompilationException$.apply(PlayExceptions.scala:27)
    at scala.Option.map(Option.scala:145)
    at play.sbt.run.PlayReload$$anonfun$taskFailureHandler$1.apply(PlayReload.scala:49)
    at play.sbt.run.PlayReload$$anonfun$taskFailureHandler$1.apply(PlayReload.scala:44)
    at scala.Option.map(Option.scala:145)
    at play.sbt.run.PlayReload$.taskFailureHandler(PlayReload.scala:44)
    at play.sbt.run.PlayReload$.compileFailure(PlayReload.scala:40)
    at play.sbt.run.PlayReload$$anonfun$compile$1.apply(PlayReload.scala:17)
    at play.sbt.run.PlayReload$$anonfun$compile$1.apply(PlayReload.scala:17)
[info] Compiling 35 Scala sources and 13 Java sources to /home/cybex/Documents/play-project/eatalot/target/scala-2.12/classes...
[error] /home/cybex/Documents/play-project/eatalot/conf/routes:8: type AccountController is not a member of package controllers.User.routes
[error] GET        /user                 controllers.User.routes.AccountController.index()
[error] /home/cybex/Documents/play-project/eatalot/conf/routes:8: type AccountController is not a member of package controllers.User.routes
[error] GET        /user                 controllers.User.routes.AccountController.index()
[error] /home/cybex/Documents/play-project/eatalot/conf/routes:8: type AccountController is not a member of package controllers.User.routes
[error] GET        /user                 controllers.User.routes.AccountController.index()
[error] /home/cybex/Documents/play-project/eatalot/app/views/User/Account/index.scala.html:28: object AccountController is not a member of package controllers.User.routes
[error]         <form action="@controllers.User.routes.AccountController.login()" method="get">
[error]                                                ^
[error] /home/cybex/Documents/play-project/eatalot/app/views/User/Account/index.scala.html:32: object AccountController is not a member of package controllers.User.routes
[error]         <form action="@controllers.User.routes.AccountController.register()" method="get">
[error]                                                ^
[error] /home/cybex/Documents/play-project/eatalot/app/views/User/Account/login.scala.html:17: object AccountController is not a member of package controllers.User.routes
[error]         <form action="@controllers.User.routes.AccountController.doLogin()" method="post">
[error]                                                ^
[error] /home/cybex/Documents/play-project/eatalot/app/views/User/Account/register.scala.html:16: object AccountController is not a member of package controllers.User.routes
[error]         <form method="post" action="@controllers.User.routes.AccountController.doRegister()">
[error]                                                              ^
[error] 7 errors found
[error] (compile:compileIncremental) Compilation failed
[info] Compiling 35 Scala sources and 13 Java sources to /home/cybex/Documents/play-project/eatalot/target/scala-2.12/classes...
[error] /home/cybex/Documents/play-project/eatalot/conf/routes:8: type AccountController is not a member of package controllers.User.routes
[error] GET        /user                 controllers.User.routes.AccountController.index()
[error] /home/cybex/Documents/play-project/eatalot/conf/routes:8: type AccountController is not a member of package controllers.User.routes
[error] GET        /user                 controllers.User.routes.AccountController.index()
[error] /home/cybex/Documents/play-project/eatalot/conf/routes:8: type AccountController is not a member of package controllers.User.routes
[error] GET        /user                 controllers.User.routes.AccountController.index()
[error] /home/cybex/Documents/play-project/eatalot/app/views/User/Account/index.scala.html:28: object AccountController is not a member of package controllers.User.routes
[error]         <form action="@controllers.User.routes.AccountController.login()" method="get">
[error]                                                ^
[error] /home/cybex/Documents/play-project/eatalot/app/views/User/Account/index.scala.html:32: object AccountController is not a member of package controllers.User.routes
[error]         <form action="@controllers.User.routes.AccountController.register()" method="get">
[error]                                                ^
[error] /home/cybex/Documents/play-project/eatalot/app/views/User/Account/login.scala.html:17: object AccountController is not a member of package controllers.User.routes
[error]         <form action="@controllers.User.routes.AccountController.doLogin()" method="post">
[error]                                                ^
[error] /home/cybex/Documents/play-project/eatalot/app/views/User/Account/register.scala.html:16: object AccountController is not a member of package controllers.User.routes
[error]         <form method="post" action="@controllers.User.routes.AccountController.doRegister()">
[error]                                                              ^
[error] 7 errors found
[error] (compile:compileIncremental) Compilation failed
其中,目录布局为
controllers/User/AccountController
,并将其用于视图中的显示目的()我使用

{root}/conf/routes

{root}/app/views/User/Account/index.scala.html

@(用户:设置[用户])
列表中的所有用户
列表中的所有用户

身份证件 名称 姓 手机
@对于(user)来说,似乎有一些bug,因为重做我以前的“测试”来让它工作,已经证明解决了这个问题

Play 2.6.1
项目的正式解决方案,包含一个子包并需要路由到该子包:

子包名称:
User
子包控制器:
AccountController


项目应用程序目录结构:

app/
      controllers/ (provided)
      filters/ (provided)
      models/ 
      services/ (provided)
      views/  (provided)
控制器目录

controllers/
          User/ (sub package)
                AccountController.java
          HomeController.java (provided)
views/
          User/
                Account/
                     index.scala.html
                     register.scala.html
          index.scala.html (provided)
帐户控制器包含以下方法:

  • 索引()
  • 寄存器()
  • 多雷吉斯特()
查看目录

controllers/
          User/ (sub package)
                AccountController.java
          HomeController.java (provided)
views/
          User/
                Account/
                     index.scala.html
                     register.scala.html
          index.scala.html (provided)
注意:尽量保持相同的目录结构(请参见
User/Account/{controller function name}

路由文件条目
conf/routes:

GET        /user                 controllers.User.AccountController.index
GET        /user/register        controllers.User.AccountController.register()

#disable this (below) and you will receive a 403 forbidden error, the CRSF filter is used for cross site scripting prevention, use for authentication. 
#You can apply this autentication: see https://stackoverflow.com/questions/45017920/post-method-rendering-403-forbidden-page-instead-of-executing-post-method-code

#+ nocsrf
POST       /user/register        controllers.User.AccountController.doRegister()

希望这能有所帮助!

似乎有一些bug,因为我以前做过的任何“测试”都证明了这一点可以解决问题

Play 2.6.1
项目的正式解决方案,包含一个子包并需要路由到该子包:

子包名称:
User
子包控制器:
AccountController


项目应用程序目录结构:

app/
      controllers/ (provided)
      filters/ (provided)
      models/ 
      services/ (provided)
      views/  (provided)
控制器目录

controllers/
          User/ (sub package)
                AccountController.java
          HomeController.java (provided)
views/
          User/
                Account/
                     index.scala.html
                     register.scala.html
          index.scala.html (provided)
帐户控制器包含以下方法:

  • 索引()
  • 寄存器()
  • 多雷吉斯特()
查看目录

controllers/
          User/ (sub package)
                AccountController.java
          HomeController.java (provided)
views/
          User/
                Account/
                     index.scala.html
                     register.scala.html
          index.scala.html (provided)
注意:尽量保持相同的目录结构(请参见
User/Account/{controller function name}

路由文件条目conf/routes:

GET        /user                 controllers.User.AccountController.index
GET        /user/register        controllers.User.AccountController.register()

#disable this (below) and you will receive a 403 forbidden error, the CRSF filter is used for cross site scripting prevention, use for authentication. 
#You can apply this autentication: see https://stackoverflow.com/questions/45017920/post-method-rendering-403-forbidden-page-instead-of-executing-post-method-code

#+ nocsrf
POST       /user/register        controllers.User.AccountController.doRegister()

希望这能有所帮助!

我很高兴您的问题已经解决。下次,请尝试分享一个最小的(!)案例。这会让我更愿意帮忙;)我很高兴您的问题已经解决。下次,请尝试分享一个最小的(!)案例。这会让我更愿意帮忙;)