Playframework路线问题

时间:2011-05-18 21:28:59

标签: java forms action playframework

我在applcation routes文件中有这个:

GET    /new                 Tweets.create
POST   /new                 Tweets.save

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

#{form @save()}
...
#{/form}

但是,一旦提交表单,它就会将我发送到/tweets/save而不是/new。我有什么想法可以解决这个问题吗?谢谢!

3 个答案:

答案 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版本。