加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Play!2.1 提示信息flash的使用

发布时间:2020-12-15 17:48:06 所属栏目:百科 来源:网络整理
导读:本文是在Play2.1下进行的,不过很可能也适合Play2的各个版本。 ? ======================================= play2.1的业务操作返回信息可以使用Ajax的结果由alert向用户展示。 如果需要这种方法,可以参考http://somefuture.iteye.com/blog/1983621 (请一定

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读