- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
系统详细信息:
简介
注意:我是玩框架的新手
我正在使用提供的“play-starter”项目,并通过该项目创建了一个路由到各个页面的 Controller 。这是通过不使用子包来实现的。
目录结构:{root}/app/controllers/MyController
MyController.index()
显示了路由路径:
GET / controllers.MyController.index
这按预期显示,我创建的 POST
方法也按预期运行。
问题:
我尝试创建子包来启动我的项目,但每次都会收到错误(详细信息如下)。
浏览routing documentation没有产生任何解决方案(对我来说)。我搜索了类似的问题,发现here是一个非常相似的问题,但答案并没有解决我的问题。
一个blog似乎解决了这个问题,我尝试过但没有成功。
错误输出:
/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
问题详细信息:
我创建了一个子包User
。在这个子包中,我有一个 Controller AccountController
AccountController
有多个函数,我将使用 doLogin()
来解决此问题
目录结构:{root}/app/controllers/User/AccountController
建议的解决方案:
所有解决方案都指向相同的代码(这会导致各种错误)
每个包都有自己的路由文件。就我而言,我应该使用controllers.User.routes
,后跟路由文件的 Controller 名称和函数
例如
POST /user/login controllers.User.routes.AccountController.doLogin()
其中目录布局是controllers/User/AccountController
,并使用它在 View 中显示目的(found here)我使用
<form action="@controllers.User.routes.AccountController.doLogin()" method="post">
但是这不起作用。
<小时/>额外信息:
{root}/app/controllers/User/AccountController
package controllers.User;
import models.User;
import play.Logger;
import play.data.DynamicForm;
import play.data.FormFactory;
import play.mvc.Controller;
import play.mvc.Result;
import views.html.User.Account.*;
import javax.inject.Inject;
import java.util.Random;
import java.util.Set;
public class AccountController extends Controller{
@Inject
FormFactory formFactory;
public Result index() {
//...
}
public Result login(){
//...
}
public Result doLogin(){
//...
}
public Result register(){
//...
}
public Result doRegister(){
//...
}
}
{root}/conf/routes
# Routes
# This file defines all application routes (Higher priority routes first)
# ~~~~
# An example controller showing a sample home page
GET / controllers.HomeController.index
GET /user controllers.User.routes.AccountController.index()
GET /user/register controllers.User.routes.AccountController.register()
GET /user/login controllers.User.routes.AccountController.login()
##disable this an you will recieve a 403 forbidden error, the CRSF filter is used for cross site scripting prevention, use for authentication
#+ nocsrf
POST /user/register controllers.User.routes.AccountController.doRegister()
#+ nocsrf
POST /user/login controllers.User.routes.AccountController.doLogin()
# An example controller showing how to use dependency injection
GET /count controllers.CountController.count
# An example controller showing how to write asynchronous code
GET /message controllers.AsyncController.message
# Map static resources from the /public folder to the /assets URL path
GET /assets/*file controllers.Assets.versioned(path="/public", file: Asset)
{root}/app/views/User/Account/index.scala.html
@(users: Set[User])
<html>
<header>
<title>All users in list</title>
</header>
<body>
<h1>All users in list</h1>
<br>
<table>
<tr>
<th>ID</th>
<th>Name</th>
<th>Surname</th>
<th>Cellphone</th>
</tr>
@for(user <- users) {
<tr>
<td>@user.id</td>
<td>@user.name</td>
<td>@user.surname</td>
<td>@user.cellNumber</td>
</tr>
}
</table>
<br>
<br>
<form action="@controllers.User.routes.AccountController.login()" method="get">
<input type="submit" value="Login">
</form>
<br>
<form action="@controllers.User.routes.AccountController.register()" method="get">
<input type="submit" value="Register">
</form>
</body>
</html>
{root}/app/views/User/Account/login.scala.html
@(message: String)
<html>
<header>
<title>Login Form</title>
</header>
<body>
<h1>Login Form</h1>
<br/>
<label>Email:</label> <input type="email" name="edtEmail"/>
<br/>
<br/>
<label>Password:</label> <input type="password" name="edtPassword"/>
<br/>
<label>@message</label>
<br/>
<form action="@controllers.User.routes.AccountController.doLogin()" method="post">
<input type="submit" value="Login">
</form>
</body>
</html>
最佳答案
似乎存在一些错误,因为重做我之前所做的任何“测试”以使其正常工作,已证明可以解决问题。
具有子包并需要路由到它的 Play 2.6.1
项目的正式解决方案:
子包名称:用户
子包 Controller :AccountController
项目应用程序目录结构:
app/
controllers/ (provided)
filters/ (provided)
models/
services/ (provided)
views/ (provided)
Controller 目录
controllers/
User/ (sub package)
AccountController.java
HomeController.java (provided)
帐户 Controller 包含方法:
查看目录
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()
希望这有帮助!
关于java - Playframework - 分包 Controller 和路由问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45053672/
我的 Angular 应用程序中有以下代码。 app.config(function($routeProvider, $locationProvider) { $locationProvider
这就是我在 Backbone 中进行路由的方式,在决定调用哪个外部模板之前,首先获取路由及其参数。我觉得这很灵活。 var Router = Backbone.Router.extend({
我是 MEAN 堆栈领域的新手,我对 Angular 路线有一些疑问。为什么我应该在客户端重新创建后端已经用express.js创建的路由,有什么好处?这是 Angular.js 工作的唯一方式吗?我
我可以设置一条从根级 URL 进行映射的路由吗? http://localhost:49658/ 我使用的是 VS2010 内置 Web 服务器。 尝试使用空白或单斜杠 URL 字符串设置路由不起作用
我有一个现有的应用程序 Rails 3.2.17和 Angular js。我想在现有应用程序中包含 Activeadmin。 我遵循了 active-admin post from ryan bate
我正在关注 this Angular 中的路由教程,它就是行不通。当我使用“comp”选择器放置它的 HTML 代码时,它可以工作,但是当我尝试使用路由器 socket 对其进行路由时,它只显示来自
多个路由通过路由器进行管理。 前端路由的概念和原理 (编程中的) 路由 (router)就是一组 key-value 对应关系,分为:后端路由和前端路由 后端路由
服务器需要根据不同的URL或请求来执行不一样的操作,我们可以通过路由来实现这个步骤。 第一步我们需要先解析出请求URL的路径,我们引入url模块。 我们来给onRequest()函数加上一些逻辑
我正在为 Angular 6 应用程序设置路由,我想要一条可以匹配可变数量的段的路由。目前我有一个看起来像这样的路由配置: const routes: Routes = [ { path: '',
用户将点击电子邮件中的链接,如下所示: do-something/doSomething?thing=XXXXXXXXXXX 如何在路由器中定义路由并订阅获取参数? 目前在我的路由器中: {
我有一个具有以下结构的 Angular (4) 应用程序: app.module bi.module auth.module 路由应该是: / -> redirect to /home /
我正在使用 WCF 4 路由服务,并且需要以编程方式配置服务(而不是通过配置)。我见过的这样做的例子很少见,创建一个 MessageFilterTable 如下: var fi
我需要创建一个“路由”服务。我正在尝试使用 .Net 的 System.ServiceModel.Routing.IRequestReplyRouter我可以让它只在 HTTP 模式下工作,而不是在
例如,链接: /shop/phones/brend/apple/display/retina/color/red 在哪里: phones - category alias brend -
非常基本的问题,我很惊讶我找不到答案。我刚刚开始研究 django 并进行了开箱即用的安装。创建了一个项目并创建了一个应用程序。 urls.py 的默认内容很简单: urlpatterns = [
我已经实现了 WCF 路由服务;我还希望该服务(或类似的 WCF 服务)以规定的和统一的(与内容无关的)方式转换有效负载。例如,有效负载将始终采用 Foo 的形式。我想把它作为Bar在所有情况下。我很
我想使用 $locationProvider.html5Mode(true); 在 angularJs 中删除 # 哈希;但这导致所有 URL 都通过 angularJs 进行路由。我如何设置它以便只
我要听导航开始事件并判断其是否url属性是 /logout . 如果是这样,路由器应该停止触发连续事件,例如 路线已识别 , GuardsCheckStart , ChildActivationSta
有人可以解释我如何使用参数路由到 URL 吗? 例如id 喜欢点击产品并通过Id打开产品的更多信息。 我的路由到目前为止... angular.module('shop', ["cus
我目前正在 Angular: 7.2.14 上构建,想看看是否有人可以解释如何使用路由保护、共享服务或其他方式等重定向查询参数。 我试图解决的问题要求查询参数从根 Uri 路径传入,然后将路由重定向到
我是一名优秀的程序员,十分优秀!