我在applcation routes文件中有这个:
GET /new Tweets.create
POST /new Tweets.save
在我看来,我正在创建一个这样的表格:
#{form @save()}
...
#{/form}
但是,一旦提交表单,它就会将我发送到/tweets/save
而不是/new
。我有什么想法可以解决这个问题吗?谢谢!
答案 0 :(得分:4)
如果您已经尝试过以下路线(这是使用路线的正确方法)
#{form @Tweets.save()}
这不起作用,我想你可能把你的路线放在了错误的地方。确保它位于routes文件的顶部,而不是在catch-all路径之后。路径文件按顺序处理,因此如果找到了catch-all,则首先使用它,然后忽略其他路径。全能型看起来像
* /{controller}/{action} {controller}.{action}
答案 1 :(得分:1)
尝试使用
#{form @Tweets.save()}
我认为建议使用带有方法名称的类名。
修改强>
播放框架路由的工作方式是将某些路由定义为
GET /clients Clients.index
如果遇到URI /clients
的请求,则会截获Clients.index()
。如果您有其他路由
GET /clients Clients.save
然后框架忽略了这个路由,因为/clients
isady有一个映射。 (很可能它在控制台或日志记录流中出现了一些错误,请检查您的日志。)
因此你不能让它像那样工作。我看到,您请求一个反向映射,它将为不同的方法返回相同的URI。但是,该框架旨在拦截请求,以便它只是忽略您的第二个路由。
尝试分隔页面。最想要的是为两个函数渲染相同的视图。您可以这样做,而无需将它们重定向到相同的URI。
答案 2 :(得分:0)
我认为(如果我没有误读)问题是你期待错误的行为。
据我所知,你希望提交将转到Tweet.save()(POST方法),然后回到Tweet.create()(GET方法),因为两者共享相同的路径(/new)。
实际上Play正在调用Tweet.save(),并且它期望Tweet.save()末尾的渲染显示一些结果。如果要重定向到Tweet.create(),可以在Tweet.save()实现结束时调用该方法,并使用以下任一方法:
create(<params>);
或
render("@create", <params>);
并且应该(通过302)重定向到GET版本。