首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Playframework路由问题

Playframework路由问题
EN

Stack Overflow用户
提问于 2011-05-19 05:28:59
回答 3查看 957关注 0票数 4

我的应用程序路由文件中有以下内容:

代码语言:javascript
复制
GET    /new                 Tweets.create
POST   /new                 Tweets.save

在我看来,我正在创建一个这样的表单:

代码语言:javascript
复制
#{form @save()}
...
#{/form}

但是一旦提交表单,它就会把我发送到/tweets/save,而不是/new。你知道我该怎么解决这个问题吗?谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-05-19 13:53:11

如果您已经尝试了下面的路由(这是使用路由的正确方法)

代码语言:javascript
复制
#{form @Tweets.save()}

这不起作用,我想你可能把你的路线放错了地方。确保它位于routes文件的顶部,而不是位于覆盖所有的路由之后。路由文件是按顺序处理的,因此如果找到了通用路由,则首先使用该路由,而忽略其他路由。概括起来看起来是这样的

代码语言:javascript
复制
*   /{controller}/{action}     {controller}.{action} 
票数 4
EN

Stack Overflow用户

发布于 2011-05-19 06:48:04

尝试使用

代码语言:javascript
复制
 #{form @Tweets.save()}

我认为建议在方法名中使用类名。

编辑:

play框架路由的工作方式是将一些路由定义为

代码语言:javascript
复制
GET     /clients         Clients.index

如果一个请求遇到URI /clients,那么它将被拦截到Clients.index()。如果您有另一个路由,

代码语言:javascript
复制
GET     /clients         Clients.save

然后,该框架会忽略此路由,因为/clients已有一个映射。(很可能是控制台或日志记录流中出现错误,请检查您的日志。)

因此,你不能让它像那样工作。我明白了,您请求了一个反向映射,它将为不同的方法返回相同的URI。然而,框架的目标是拦截请求,因此它将简单地忽略您的第二个路由。

试着分页。很可能您想要的是为两个函数呈现相同的视图。您可以这样做,而无需将它们重定向到相同的URI。

票数 1
EN

Stack Overflow用户

发布于 2011-05-19 16:36:58

我认为(如果我没有读错的话)问题在于你期望了错误的行为。

据我所知,您期望提交将转到Tweet.save() (POST方法),然后返回到Tweet.create() (GET方法),因为两者共享相同的路径(/new)。

实际上,Play调用的是Tweet.save(),它希望Tweet.save()末尾的呈现能够显示一些结果。如果要重定向到Tweet.create(),可以在Tweet.save()的实现结束时调用该方法,使用以下两种方法之一:

代码语言:javascript
复制
create(<params>);

代码语言:javascript
复制
render("@create", <params>);

并且应该(通过302)重定向到GET版本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6051234

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档