2014-02-11 26 views
1

我想在作业中生成PDF而不是在控制器中创建它,因为它需要时间。我正在使用下面显示的PDF生成代码。这是Play框架提供的标准功能。播放框架1.2.x PDF模块问题,同时生成pdf在作业/离线

PDF.writePDF(file,"test.html",data, options); 

现在,当我运行这个我得到空指针异常。我在Play框架PDF模块源代码中调试了这个问题。下面是空指针所在的那一行,因为它试图访问请求对象,但由于我从一个Job中调用了代码,而不是从Controller调用,所以请求为空。

public static void writePDF(OutputStream out, Object... args) { 
    final Http.Request request = Http.Request.current(); 
    final String format = request.format; 

是否有任何其他方式来实现此功能。

回答

1

Request类的代码显示当前变量是公共的,并且它存储在一个ThreadLocal中。然后,您应该能够在作业开始时设置自己的Request对象。使用下面的代码创建一个自己的Request对象。

Http.Request request = Http.Request.createRequest(...); 
Http.Request.current.set(request); 
+0

谢谢你的回答。有效。只需添加,与此我需要设置响应,闪光灯和参数隐式对象。 –

+0

嗨,保罗,遇到同样的问题,你能展示一个“用这个我需要设置响应,闪存和参数隐式对象的例子。” – Axxoul