我的应用程序路由文件中有以下内容:
GET /new Tweets.create
POST /new Tweets.save在我看来,我正在创建一个这样的表单:
#{form @save()}
...
#{/form}但是一旦提交表单,它就会把我发送到/tweets/save,而不是/new。你知道我该怎么解决这个问题吗?谢谢!
发布于 2011-05-19 13:53:11
如果您已经尝试了下面的路由(这是使用路由的正确方法)
#{form @Tweets.save()}这不起作用,我想你可能把你的路线放错了地方。确保它位于routes文件的顶部,而不是位于覆盖所有的路由之后。路由文件是按顺序处理的,因此如果找到了通用路由,则首先使用该路由,而忽略其他路由。概括起来看起来是这样的
* /{controller}/{action} {controller}.{action} 发布于 2011-05-19 06:48:04
尝试使用
#{form @Tweets.save()}我认为建议在方法名中使用类名。
编辑:
play框架路由的工作方式是将一些路由定义为
GET /clients Clients.index如果一个请求遇到URI /clients,那么它将被拦截到Clients.index()。如果您有另一个路由,
GET /clients Clients.save然后,该框架会忽略此路由,因为/clients已有一个映射。(很可能是控制台或日志记录流中出现错误,请检查您的日志。)
因此,你不能让它像那样工作。我明白了,您请求了一个反向映射,它将为不同的方法返回相同的URI。然而,框架的目标是拦截请求,因此它将简单地忽略您的第二个路由。
试着分页。很可能您想要的是为两个函数呈现相同的视图。您可以这样做,而无需将它们重定向到相同的URI。
发布于 2011-05-19 16:36:58
我认为(如果我没有读错的话)问题在于你期望了错误的行为。
据我所知,您期望提交将转到Tweet.save() (POST方法),然后返回到Tweet.create() (GET方法),因为两者共享相同的路径(/new)。
实际上,Play调用的是Tweet.save(),它希望Tweet.save()末尾的呈现能够显示一些结果。如果要重定向到Tweet.create(),可以在Tweet.save()的实现结束时调用该方法,使用以下两种方法之一:
create(<params>);或
render("@create", <params>);并且应该(通过302)重定向到GET版本。
https://stackoverflow.com/questions/6051234
复制相似问题