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 演变

是否建议启动 Playframework 1.x 应用程序?

Playframework 推送到 Websocket

PlayFramework 2.4 和 IntelliJ 14

Play Framework 2.4.x - 覆盖默认的 Actor 系统创建

如何在 playframework 中使用依赖注入创建 Ebeanserver?