playframework,需要一个好的创建、更新、删除示例使用相同的 html 页面
Posted
技术标签:
【中文标题】playframework,需要一个好的创建、更新、删除示例使用相同的 html 页面【英文标题】:playframework, need a good create, update, delete example USING same html page 【发布时间】:2012-02-12 22:18:41 【问题描述】:playframework 中的示例似乎缺少我的示例。预订是最接近的,但它是 CRUD 模块的一个示例,并使用此 parent() 调用,我也不确定它的作用。有没有没有 CRUD 模块的例子?
此外,所有验证示例示例都在 http POST 的方法上调用“render”...这是首选方法,而不是重定向到页面中出现错误的 GET?
我正在寻找可以回答所有这些问题的具体示例是
使用 editentity.html 创建新对象 出现错误重新渲染 并使用 editentity.html 编辑旧对象(显然与上面相同的 html 页面)。这方面有什么好的例子吗?
这里有更多注释... 我们从调用页面(或不同的调用页面)得到这个 用于添加项目
<a href="@Project.editProject(null)">Add Project</a>
用于编辑项目
<a href="@Project.editProject(project.name)">Edit</a>
但是现在如果我这样做了,我现在会像以前一样在帖子中挣扎
public static void postProject(ProjectDbo project)
if(validation.hasErrors())
Validation.keep();
params.flash();
Project.editProject(???????/???); //I need to pass in the project to refill in the form AND the project.name for the routes file???
SomePage.pageXXXXX();
注意: ????是我需要传入projectDbo的地方,但该方法只接受projectName。如何让内容重新呈现在页面中?
我认为必须有一种方法可以调用 editProject 并设置页面也需要访问 projectDbo 或者没有办法做到这一点?这个图案怎么做?
尝试 #5:我确实尝试使用 params.flash 并调用 Project.editProject(project.name) 但不幸的是,我的表单都没有被重新填写,并且用户丢失了他填写的所有工作。唯一的我的工作是使用渲染(动作,参数列表与动作参数不匹配)
(预订示例中有很多 ajax,所以很难在其中看到示例)。
这是一个常见的用例,我原以为会有一个例子。
谢谢, 院长
【问题讨论】:
【参考方案1】:我已经为布宜诺斯艾利斯的 Java 用户组的演示构建了该示例。
它只是一个基本的 crud 应用程序,具有验证、一对多关系、夹具、测试、标签、twitter 引导程序以及部署到多个 PaaS 云计算的功能。
这是 github 仓库:https://github.com/opensas/play-demo
详细的分步教程:https://github.com/opensas/play-demo/wiki
应用程序已启动并正在运行
Openshift、Google application engine、heroku、Cloudbees
是基于zencontact example,这也是您正在寻找的。p>
关于使用相同的表单,这是来自应用程序的代码:
public static void form(Long id)
final Event event;
if (id==null)
event = new Event();
else
event = Event.findById(id);
render(event);
public static void save(@Valid Event event)
if (validation.hasErrors())
render("@form", event);
event.save();
flash.success("event successfully saved!");
list();
希望对你有用……
感谢
萨斯
【讨论】:
很好,但我实际上是在尝试使用该方法,因此会发生重定向回同一页面,因为渲染不会进行重定向,并且不会导致丑陋的“你将重新提交如果您返回此数据”浏览器中的弹出窗口????虽然这次我没有在 chrome 中看到它……这是怎么回事?为什么它似乎在没有像通常那样做重定向的情况下工作?【参考方案2】:关于“发布后重定向”方法,我写了一篇关于该主题的文章(西班牙语,抱歉,您可以尝试使用谷歌翻译)
https://github.com/opensas/RedirectAfterPost/blob/master/README.md
这是一个示例应用程序的 git repo:https://github.com/opensas/RedirectAfterPost
基本上有两种方法:
在不重定向的情况下再次呈现同一页面(就像在 zentalk 示例中所做的那样)
优点:
我们避免重定向 我们没有 cookie 大小限制问题 代码更简洁、更直观 当我们创建一个项目时,实例化一个对象并以其初始状态显示它会更容易缺点:
如果用户在出错后按 F5,浏览器会要求确认重新提交将所有数据和错误保存在闪存中,并强制重定向
优点:
主要优点是,如果用户在收到错误后按 F5 键(它只会重复上次重定向到的 GET),则可以防止用户发布另一个帖子测试样品只需发出:
git clone git@github.com:opensas/RedirectAfterPost.git
cd RedirectAfterPost/
play run
【讨论】:
这个例子虽然缺少编辑??????我很好奇它会喜欢什么样的编辑......这是棘手的部分,我认为它变得非常丑陋。 在另一个教程中 (github.com/opensas/play-demo) 我有添加和编辑,使用呈现的方法(无重定向)【参考方案3】:有什么原因吗
http://www.playframework.org/documentation/1.2.4/validation
没有告诉您您需要了解的所有信息吗?特别是“validation.keep()”方法。
【讨论】:
Validation.keep 没有告诉我答案???在 Project.editProject(?????????/???);这就是我要找的。此外,Validation.keep 不适用于您使用渲染时,而仅适用于您进行重定向时。在我的示例中,由于我正在执行重定向(我会将其重新添加),因此我确实意外遗漏了该代码。【参考方案4】:我最终做了我自己的示例,我可以使用此处包含的 ajax 来窃取
https://github.com/deanhiller/timecardz/blob/master/app/controllers/OurPattern.java
视图 https://github.com/deanhiller/timecardz/tree/master/app/views/OurPattern
POST 的重要路由都是通用的,因此它们可以用于所有控制器,而不仅仅是这个
# Routes for all ajaxAddEdit and delete stuff
GET /controller/ajaxAddEdit/id controller.ajaxAddEdit
GET /controller/ajaxDelete/id controller.ajaxDelete
# Catch all
POST /controller/action controller.postaction
页面的 GET 路由是唯一的特定路由。
有一段时间我有一个实时版本在运行
http://myextremestore.com/ourpattern
该示例中唯一缺少的是在 POST 调用中验证拥有实体(注意在我的控制器中,post 方法称为 postXXX)
【讨论】:
以上是关于playframework,需要一个好的创建、更新、删除示例使用相同的 html 页面的主要内容,如果未能解决你的问题,请参考以下文章
是否建议启动 Playframework 1.x 应用程序?
PlayFramework 2.4 和 IntelliJ 14