本文是在Play2.1下进行的,不过很可能也适合Play2的各个版本。
=======================================
play2.1的业务操作返回信息可以使用Ajax的结果由alert向用户展示。
如果需要这种方法,可以参考http://somefuture.iteye.com/blog/1983621
(请一定注意:这种方法仅仅适合于Play!2.1,其他版本几乎是不可能这样做的。)
我写了一个通用方法,可以进行增删改:
import java.util.concurrent.Callable; import play.db.jpa.JPA; import play.libs.F.Function; import play.libs.F.Function0; import play.libs.F.Promise; import play.mvc.Result; import play.mvc.Results; public class AsyncTransanctionUtil{ public static final Integer PERSIST = 1; public static final Integer MERGE = 2; public static final Integer REMOVE = 3; public static Result asyncResult(final Integer type, final Object object) { Promise<Boolean> promiseOfInt = play.libs.Akka .future(new Callable<Boolean>() { public Boolean call() { if (type == PERSIST) { try { JPA.withTransaction(new Function0<Void>() { @Override public Void apply() throws Throwable { JPA.em().persist(object); return null; } }); } catch (Throwable e) { return false; } }else if (type == MERGE) { try { JPA.withTransaction(new Function0<Void>() { @Override public Void apply() throws Throwable { JPA.em().merge(object); return null; } }); } catch (Throwable e) { return false; } }else if (type == REMOVE) { try { JPA.withTransaction(new Function0<Void>(){ public Void apply() throws Throwable { Object obj = JPA.em().merge(object); JPA.em().remove(obj); return null; }; }); } catch (Throwable e) { return false; } } return true; } }); return Results.async(promiseOfInt.map(new Function<Boolean, Result>() { public Result apply(Boolean result) { if (result) { return Results.ok("success"); }else { return Results.badRequest("fail"); } } })); } }
==========================================以上是异步处理
Play还可以使用flash进行操作提示。
业务处理结束后,通过一句即可
flash("success", "完成了,啊哈哈哈");
比如:
@Transactional public static Result deletedp(Long sid, Long pid){ Deployment deployment = (Deployment) JPA.em() .createQuery("from Deployment where sid=? and pid=?") .setParameter(1, sid).setParameter(2, pid).getResultList() .get(0); // return AsyncTransanctionUtil.asyncResult(AsyncTransanctionUtil.REMOVE, deployment); JPA.em().remove(deployment); flash("success", "呃,就这样吧,主公快走"); return redirect("/index"); }
这样页面会收到flash信息。
因为flash信息是一种HTTP内容,保存进了cookie中:
package play.mvc; import java.io.*; ... /** * Defines HTTP standard objects. */ public class Http { ... /** * HTTP Flash. * <p> * Flash data are encoded into an HTTP cookie, and can only contain simple String values. */ public static class Flash extends HashMap<String,String>{...} ... }
上面是Flash类的定义。
页面的获取方式很简单:
@if(flash.containsKey("success")){ <div> @flash.get("success") </div> }
把想要展示的东西if出来就行。
======================存在的问题:
如果从该页面跳转后再返回来,由于不是重新请求,flash信息依然存在也会显示出来。
相关推荐
play框架 2.1 api
The Learning Play! Framework 2 has been created for web developers that are building web applications. The core idea is to focus on the ...
play framework api,play! framework api,play api
学习Play!框架的好资料,英文版的,分享一下
对play!的CRUD 进行改造,改代码还会持续重构,并不完善。 1.将create,show,delete,list都改成@Util方法,可以类似 public static void show(String id){ MyCRUD.show(id); } 的方式调用。更通用。 2.增加@...
2.1 创建 Play 的工程 2.2 Play 常用指令 2.3 Play 应用的 JVM 调优 3. 如何读取静态资源 4. Play框架的配置文件 5. 使用 Play 框架开发 Java 应用 5.1 HTTP编程 5.1.1 什么是 Action? 5.1.2 什么是 Result ...
FlashPlay 21.0 flash播放器最新版20160524
Chrome谷歌 flash play 插件离线包
flash play卸载工具,如果flash报错,可以用此工具完美解决
Unit 1 Lesson 3 Let’s Play!练习题及答案.doc
Interfaces imported from flash.ocx WIN32下的flash播放
flashplay 更新至10.2 debug
NULL 博文链接:https://nickdine.iteye.com/blog/674389
一个优于RoR的快速开发框架playframework,完全面向对象,基于jvm的REST框架,文档非常少,上手很容易,从名字上可以看出play就是玩,可以当作游戏一样轻松的玩的框架,这是它的API文档,网页格式.
NULL 博文链接:https://modun.iteye.com/blog/1595857
IE的flashplay10插件,及开发的调试debug
tea flash play apk testtea flash play apk testtea flash play apk testtea flash play apk testtea flash play apk testtea flash play apk testtea flash play apk test
FLASHPLAY安装旧版本方法 删除注册表项即可