我在我的applcation routes文件有这个Playframework路线问题
#{form @save()}
...
#{/form}
但一旦是提交它的发送形式我到/tweets/save
而不是/new
。任何想法如何解决这个问题?谢谢!
我在我的applcation routes文件有这个Playframework路线问题
#{form @save()}
...
#{/form}
但一旦是提交它的发送形式我到/tweets/save
而不是/new
。任何想法如何解决这个问题?谢谢!
如果你已经尝试下面的路线(这是使用路线的正确方法)
#{form @Tweets.save()}
,这没有工作,我想你可能已经把你的路线错了地方。确保它位于路线文件的顶部,而不是在全部路线之后。路径文件按顺序处理,所以如果找到了catch-all,则首先使用该路由文件,并忽略其他路由。全部看起来像
* /{controller}/{action} {controller}.{action}
这是导致这个问题,我不知道顺序重要,我把我的代码放在我的路线文件的底部。谢谢! – networkprofile 2011-05-19 10:02:10
使用
#{form @Tweets.save()}
我认为这是建议与方法名称中使用类名尝试。
编辑:
播放架构路由的工作方式是你定义为
GET /clients Clients.index
一些路线如果与URI /clients
遇到了一个请求,那么它将被截获Clients.index()
。如果您有其他路由,以便将
GET /clients Clients.save
然后框架会忽略此路由,因为/clients
AREADY有一个映射。 (很可能它在控制台或日志记录流中给出了一些错误,请检查你的日志。)
因此你不能使它像那样工作。我看到,你请求了一个反向映射,它将为不同的方法返回相同的URI。然而,该框架旨在拦截请求,以便它会忽略你的第二个路由。
尝试分开页面。很可能你想要的是为两个函数渲染相同的视图。你可以做到这一点,而不必将它们重定向到相同的URI。
我认为(如果我没有误读),问题是你期待错误的行为。
据我所知,你期望提交将发送到Tweet.save()(POST方法),然后返回到Tweet.create()(GET方法),因为它们都共享相同的路径(/ new)。
实际上,Play正在调用Tweet.save(),它期望Tweet.save()结束时的渲染显示一些结果。如果你想重定向到Tweet.create(),你可以在Tweet实现结束时对该方法进行调用。保存(),与任一:
create(<params>);
或
render("@create", <params>);
以及应当(经由302)重定向到GET版本。
我期待着这里描述的行为:http://www.playframework.org/documentation/1.2.1/guide9问题是我的路线顺序。 – networkprofile 2011-05-19 10:04:14
显示您的整个路线文件,而不仅仅是相关的代码段。正如Codemwnci所述,您定义路线的顺序非常重要。 – 2011-05-19 07:26:36