bla*_*666 5 playframework progress-bar
在Play中实施某种进度指标的最佳方法是什么?
我有一个简单的导入页面,用户可以上传csv文件.然后服务器进行一些长度处理,直到导入完成.我想在上传后将用户重定向到单独的页面,并在此页面上给他一些持续的反馈,即"导入的856个数据集中的150个".
上传操作会触发一个控制器方法,该方法可以在自己的线程中启动耗时的任务,但是如何通过来自另一个页面的ajax调用获取作业的状态(因为play在请求之间没有任何类型的状态) ?
您可能要做的就是从控制器创建一个作业。事实上,如果您阅读 Play 文档,我们明确鼓励您在作业中执行长时间运行的处理,以便它们不会占用 HTTP 请求线程。
因此,您的作业正在通过处理 CSV 文件来运行。下一步是记录每个数据集的处理时间。因此,假设您向作业传递了一个引用,例如 uid 或某个唯一编号,然后将其传回给客户端。然后,您只需记录(如果您想符合无状态性并轻松扩展,可能在数据库中)根据您的唯一 ID 处理的数据集数量的每个增量。
例如
@Entity
public class DatasetProgress extends Model {
public Long uid;
public Long datasetsDone;
public Long datasetsTotal;
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以创建一个控制器操作,该操作根据您的 uid 返回 DatasetProgress 对象,您可以使用该对象来显示进度条。