Play!2.1 提示信息flash的使用

简介: 本文是在Play2.1下进行的,不过很可能也适合Play2的各个版本。   ======================================= play2.1的业务操作返回信息可以使用Ajax的结果由alert向用户展示。

本文是在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信息依然存在也会显示出来。

 

 

目录
相关文章
|
机器学习/深度学习 Linux vr&ar
ARIMA差分自回归移动平均模型
ARIMA是**差分自回归移动平均模型**的引文缩写,其中AR表示的是自回归模型,MA表示的是移动平均模型,I表示的是差分。一般写成ARIMA(p,d,q),p是自回归阶数,q是移动平均阶数,d表示差分的次数。
1967 0
ARIMA差分自回归移动平均模型
|
Linux 开发工具 Android开发
python之实现apk
python之实现apk
|
网络协议 安全 物联网
探索未来网络:IPv6的演进与应用
本文深入探讨了互联网协议第6版(IPv6)的发展历程、技术特点以及在各领域的应用前景。通过对IPv4面临的问题进行分析,阐明了IPv6出现的必要性及其在地址空间扩展、安全性提升和自动配置等方面的显著优势。结合当前技术趋势和应用案例,展望了IPv6在未来网络中的发展潜力,为相关领域的研究和实践提供了参考。
|
10月前
|
人工智能 自然语言处理 搜索推荐
“AI拜年”火遍朋友圈,营销的终局是拼技术
2025年春节前夕,AI拜年成为新潮流。百度通过“春节祝福语”活动,利用文心大模型4.0 Turbo生成个性化拜年贺卡,用户只需上传照片和输入文案,即可获得高度逼真的定制贺卡。这项技术凭借iRAG(检索增强生成)实现了高精度图像生成,避免了常见的“AI味儿”,使AI生成的内容既真实又富有文化内涵,为普通用户带来了专业级的创作体验,也为图像生成的产业化落地铺平了道路。
484 9
|
API 开发工具 开发者
抖音商品详情API入门:为开发者和商家打造增长工具箱
抖音商品详情API入门:为开发者和商家打造增长工具箱
|
存储 机器学习/深度学习 应用服务中间件
阿里云倚天云服务器实例:计算型c8y、通用型g8y、内存型r8y实例介绍
阿里云倚天云服务器是基于阿里云自研的倚天710 ARM架构CPU打造的高性能计算产品系列,它依托先进的第四代神龙架构,旨在为用户提供稳定可预期的超高效能体验。倚天云服务器在存储、网络性能及计算稳定性方面实现了显著提升,主要得益于其芯片级的快速路径加速技术。本文将深度解析阿里云倚天云服务器的计算型c8y、通用型g8y、内存型r8y实例,探讨其优势及适用场景,以供选择参考。
|
测试技术 数据库
『软件测试2』 关于黑盒测试和测试用例的基础知识
该文章讲解了黑盒测试的基本概念以及如何编写有效的测试用例,包括选择合适的输入数据、预期结果的设定和测试执行的步骤。
|
Java Unix Shell
苹果app代码行数统计
苹果app代码行数统计
210 1
|
存储 缓存 运维
云计算架构设计原则
【4月更文挑战第6天】这篇文章介绍了基于云计算的架构设计六大原则:合理部署、业务持续、弹性扩展、性能效率、安全合规和持续运营。
|
监控 安全 测试技术
【亮剑】在网络技术日益发展的今天,端口映射已成为家庭和企业网络环境中不可或缺的一项技术。
【4月更文挑战第30天】本文介绍了端口映射(Port Forwarding)的概念,它是NAT技术的一种,用于让外部设备访问内部网络服务。端口映射广泛应用于远程桌面、网络游戏、视频监控和个人服务器托管等场景。操作步骤包括登录路由器管理界面、设置映射规则、保存并启用规则,以及测试映射效果。虽然端口映射能扩大网络应用,但也可能带来安全风险,因此需谨慎管理和设置安全措施。
393 0